• ベストアンサー

アニメーションのプログラムの挙動の意味

@charset "utf-8"; .box { width: 80px; height: 80px; background: pink; animation-name: move-around; animation-duration: 4s; animation-iteration-count: infinite; } ここから意味を知りたい。 @keyframes move-around { 25% { transform: translate(100px, 0); } 50% { transform: translate(100px, 100px); } 75% { transform: translate(0, 100px); } } ここまで ▢ → ▢ ↑    ↓ ▢ ← ▢ このプログラムを実行すると。 四角がこのように移動するのですが 自分の考えていた命令文と違う気がするのですが ご教示お願いしたいです、宜しくお願いします。 因みにドットインストールのアニメーション編の問題です。

  • CSS
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>何か本当にこんな事にも中々気づけなくてすみませんでした。 いやいや、そこが一番楽しい時間じゃないかと^^ 「あ~はいはい~」のタイミングが一番楽しいですよね^^ 用は、移動方向を書いてるんじゃなくて移動完了後の位置を書いて、 そこにいつ行くか?4秒の4画=1秒だよ~ってことだけ 気がつけば、それでよかっただけですね、。 ただ、デフォルトは、加速移動になってるので、 0,25,50,75で止まったように見えるので。 気持ち悪いけど^^さっきのオプションでリニア加えれば、 普通のプログラム言語で書いたみたいな動きになりますんで~ んま、私でよければ^^また、聞いてくださいませませ。 では!さらばじゃ~(どういうキャラや、わし)

その他の回答 (3)

回答No.3

まず、画面は「左上」を原点としており、 そこが、0,0となり、右下に向かうにつれて XとYが「増える」と考えてください。 >そもそも50%だの75%だのの位置関係が解りませんね。 ここは、位置ではなく時間です。 見えないですが、.boxの時点が0%で 25%、50%、75%の4個あるわけですが。 0%は移動していない状態とみなして0,0だと思ってください。 0%:0,0 25%:100px, 0 50%:100px, 100px 75%:0, 100px と宣言しているので、 >75%?は左に移動するのだからX軸が-100移動しなくてはいけないのではと勘違いしています。 50%の位置からみたら確かにX-=100ですが、 そうではなく、「どこでもいい」ので、 75%の位置に来たら、0, 100pxの位置になれよ! って書いてるのと同じです。 しかも、4秒÷4個のアニメ=つまり、50%~75%までの 時間は「4÷4=1秒」 なので、75%の時、どこにいるかわからんがとにかく (0,100)の位置に来いよ!って事です。 「移動方向」のアニメじゃなくて、 「移動結果」をアニメとして 記載していると思えばOKかな~

JackTheRipper99
質問者

お礼

回答ありがとうございます。 なるほど、つまりは、結果的には25%の位置に来たらとにかくx軸で右に100,50%の位置に来たら、右に100,下に100移動して 75%に来たら、下にだけ100という事になるのですね。 そして0%と100%は同じだから省いてもOKなんですよね。 (つまり戻るときは結果的に勝手に(0座標の元の位置に)戻るから-100はいらない)という事ですかね。

JackTheRipper99
質問者

補足

あー、なるほどです。 ようやく解りました。 x軸y軸の動きで考えると、xが100yが100動くと真横に動きますが、yの100を省くと右下斜めに動くのですね。 だから細かく設定しなければいけないのですね。 何か本当にこんな事にも中々気づけなくてすみませんでした。

  • asciiz
  • ベストアンサー率70% (6637/9404)
回答No.2

ブラウザにおけるX軸は、右方向がプラスです。一般的な数学のグラフと一緒です。 しかし、Y軸は下方向がプラスとなっています。 数学のグラフとは上下が逆になる関係です。 ブラウザに表示される文字の流れを考えてもらうとわかりやすいと思います。 普通に書かれた文字は、左端から右に向かって伸びていきます。 そして改行すれば、下方向へ儲かって、2行目・3行目…と、下方向へ進んでいきます。 グラフィックス座標もそれに合わせてあるという訳です。

JackTheRipper99
質問者

お礼

回答ありがとうございます。

回答No.1

>自分の考えていた命令文と違う気がするのですが 何と比較して、違うのかが、わからないので何ともですが。 一番最初 class=boxで、原点x=0,y=0の位置にいるわけですが。 アニメーションは” animation-duration: 4s;”合計で4秒あると宣言 その4秒の25%の位置で、x=100,y=0にいけ~ と書いてるわけで。残りも同じ。 75%までしかないのは、100%と0%は位置が同じだから、 0%の位置=つまりx=0,y=0に移動せよという事。 綺麗にアニメがつながっていないような? って意味の「違う気がする」なのであれば、 https://magazine.techacademy.jp/magazine/25592 これらで、確認できる通り、 "animation-timing-function"の 動き方のパラメーターをいじって。 animation-timing-function: linear; などとすれば、C言語などで作ったかのような 「そのまんま」の動きになりますよ。 ただ、何と比較しての、違う気がする~ の雰囲気が、わからなかったので、 手当たり次第に?書いてみましたが。。 どんなもんでしょ。。

JackTheRipper99
質問者

お礼

回答ありがとうございます。 オブジェクトが移動する際の位置関係がいまいち把握できないのです。 最初がX軸で右に100動くのは解るのですが・・・。 そもそも50%だの75%だのの位置関係が解りませんね。 75%?は左に移動するのだからX軸が-100移動しなくてはいけないのではと 勘違いしています。

JackTheRipper99
質問者

補足

何度もすみません、本当に解りました、今度は大丈夫^^; あれですね、つまりはその時点の位置で0,100pxの場所に移動しているって事ですよね。

関連するQ&A

  • cssのanimationの設定の仕方

    Animationの表示タイミングが合わないので教えてください。 今回初めてcssのanimationを使ってみました。 同時に、jQuery.BgSwitcher を使って背景画像5枚を5秒間づつ表示させてループさせています。(合計25秒間)そして、cssのanimation でテキストA,B,Cの3枚を25秒間表示させています。 表示タイミングは 【背景画像1を表示 テキストAを表示 テキストBを非表示 テキストCを非表示】 【背景画像2を表示 テキストAを非表示 テキストBを非表示 テキストCを非表示】 【背景画像3を表示 テキストAを非表示 テキストBを表示 テキストCを非表示】 【背景画像4を表示 テキストAを非表示 テキストBを非表示 テキストCを非表示】 【背景画像5を表示 テキストAを非表示 テキストBを非表示 テキストCを表示】 背景画像で使用しているjQuery.BgSwitcherの表示時間は1枚5秒です。5枚ですので25秒でループです。animationが適応されているテキストA,B,Cの animation-duration: 25s; にしています。 テキスト画像A,B,Cは表示されるタイミングではopacity:1 にしてそれ以外はopacity:0で非表示にして背景画像1,2,3とテキストA,B,Cとの表示タイミングが合わせたいです。 初めはタイミングよく背景画像とテキスト画像が表示されているのですが徐々に表示タイミングずれてしまい5分ぐらいするとanimationのテキストA,B,Cの表示タイミングが背景画像と大きくずれ、例えばテキストAが背景画像5で表示されるようになってしまいます。 jQuery.BgSwitcherでの背景画像5枚の1ループの時間は25秒。animationのテキストA,B,Cのanimation-duration: 25s; なのですが、徐々にずれてしまいます。 animation側の設定に問題があるかもしれませんので教えていただけないでしょうか? 現在のテストサイトは下記です。 http://cm-creation.net/yoshida/text-anime-test/index13.html どうぞよろしくお願いいたします。Cssとhtml設定は下記です。 ■cssの設定 .bg-slider { width: 99.1vw; height: 100vh; background-position:center center; background-size: cover; display: flex; justify-content: center; position: relative; } .textA { position: absolute;   top: 5%;    left:20%; animation-name:animation1; animation-duration:25s; animation-timing-function: ease-in-out; animation-delay: 0s;    opacity: 0;    animation-iteration-count: infinite; animation-direction: normal; animation-fill-mode: forwards; } .textB { position: absolute; top: 5%;    right:20%; animation-name:animation2; animation-duration:25s; animation-timing-function: ease-in-out; animation-delay: 0s;   opacity: 0;   animation-iteration-count: infinite; animation-direction: normal; animation-fill-mode: forwards; } .textC { position: absolute; top: 5%; animation-name:animation3; animation-duration: 25s; animation-timing-function: ease-in-out; animation-delay: 0s;     opacity: 0;    animation-iteration-count: infinite; animation-direction: normal; animation-fill-mode: forwards; } @keyframes animation1 { 0% { opacity: 0; transform: translate3d(0, 30px, 0);   } 5% { opacity: 1; transform: translate3d(0, 0, 0);    } 26% { opacity: 0; transform: translate3d(0, 0, 0); } 100% { opacity: 0; transform: translate3d(0, 0, 0); } } @keyframes animation2 { 0% { opacity: 0; transform: translate3d(0, 0px, 0); } 41% { opacity: 0; transform: translate3d(0, 30px, 0); }  45% { opacity: 1; transform: translate3d(0, 0, 0); } 66% { opacity: 0; transform: translate3d(0, 0px, 0); } 100% { opacity: 0; transform: translate3d(0, 0, 0); } } @keyframes animation3 { 0% { opacity: 0; transform: translate3d(0, 0px, 0); }   81% { opacity: 0; transform: translate3d(0, 30px, 0); } 85% { opacity: 1; transform: translate3d(0, 0, 0); }   101% { opacity: 0; transform: translate3d(0, 0px, 0); }  102% { opacity: 0; transform: translate3d(0, 0, 0); } } ■html <script> jQuery(function($) { $('.bg-slider').bgSwitcher({ images: image/main10.jpg','image/main11.jpg','image/main12.jpg','image/main13.jpg','image/main14.jpg'], // 切り替える背景画像を指定 interval: 5000, // 背景画像を切り替える間隔を指定 5000=5秒 loop: true, // shuffle: false, // effect: "fade", // エフェクトの種類をfade,blind,clip,slide,drop,hideから指定 duration: 500, // エフェクトの時間を指定します。 easing: "swing" // エフェクトのイージングをlinear,swingから指定 }); }); </script> <div class="container-fluid px-0 bg-slider " > <div class="textA"><img src="image/item8.png" class="img-fluid" alt=""/></div> <div class="textB"><img src="image/item9.png" class="img-fluid" alt=""/></div> <div class="textC"><img src="image/item10.png" class="img-fluid" alt=""/></div> </div>

    • ベストアンサー
    • HTML
  • 次のhtml・cssでspan内の文字を点滅させる

    次のhtml・cssでspan内の文字を点滅させるには、どのようにしたらよいのでしょうか。 但し、テスト1が表示されている間は、テスト2と3は消えており、 テスト2、3が表示されている間はテスト1が消えている状態にしたいです。 なぜか、反復の意味を持つdurationタグの後ろに連結して、duration:blinkはできませんでした。 <div class="test"> <span class="brinking1">テスト1</span> <span class="brinking2">テスト2</span> <span class="brinking3">テスト3</span> </div> <style> .test { margin: auto; background-color: white; position: relative; } .test blinking { width: 50%; animation-name: test; -webkit-animation-name: test; animation-duration:blink 10s; -webkit-animation-duration: 10s; animation-iteration-count: infinite; -webkit-animation-iteration-count: infinite; opacity: 0;} .test .brinking1 { display: block; margin: 0 auto; } .test .brinking2,.test .brinking3 { animation-delay:5s; -webkit-animation-delay:5s; position: absolute; top: 0; left: 25%; } @keyframes test { 0% { opacity: 0; } 50% { opacity: 1; } } @-webkit-keyframes test { 0% { opacity: 0; } 50% { opacity: 1; } } </style>

    • 締切済み
    • CSS
  • CSS transformで完了後戻らないように

    タイトルの通りですが、transform: translateで移動後、完了イベントでjsの処理を呼んでいるのですが その後、移動のアニメーションが初期の位置に戻ってしまいます。 -webkit-transform: translate(100px , 0px); 戻らないようにするにはどうすれば良いでしょうか。

    • ベストアンサー
    • CSS
  • スクロールで画面が読み込まれたら動くようにしたい

    html、cssでテキストを動くようにしたのですがjavascript(jquery)で スクロールで画面が読み込まれたら動くようにしたいのですがどうすれば良いでしょうか。 html <body> <section> </section> <div class="heading"> <div> <p class="slide-up">salon</p> </div> <div> <p class="slide-up">info</p> </div> <div> </div> </body> </body> </body> css body, html { width: 100%; font-family: 'Times New Roman', Times, serif; } section { height: 200vh; } .fadeUp { animation-name: fadeUpAnime; animation-duration: 0.5s; animation-fill-mode: forwards; opacity: 0; } .heading { margin: 80px 0 0 80px; font-size: 15em; line-height: 90%; } .heading>div { overflow: hidden; } .heading>div>p { width: -webkit-max-content; width: -moz-max-content; width: max-content; white-space: nowrap; margin: 0; } div.heading>div { -webkit-animation-delay: 1s; animation-delay: 1s; } .slide-up { -webkit-animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; } @-webkit-keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } } @keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } }

  • プログラム CSS3 アニメーション

    .text{ position: relative; display: inline-block; font-size: 2em; } .text:before{ position: absolute; top: 1.3em; left: 0; content: ""; display: inline-block; width: 0; height: 2px; background: #34BBF3; transition: 2s; } .text:hover:before{ width: 100%; } このプログラムはhttps://qiita.com/junya/items/4805404624292401030dからコピペしたCSS3のアニメーションを使ったアンダーラインのプログラムです。 このプログラムの四行目と九行目につかわれている「em」とはなんですか。

    • 締切済み
    • CSS
  • プログラム CSS3 アニメーション

    .text{ position: relative; display: inline-block; font-size: 2em; } .text:before{ position: absolute; top: 1.3em; left: 0; content: ""; display: inline-block; width: 0; height: 2px; background: #34BBF3; transition: 2s; } .text:hover:before{ width: 100%; } このプログラムはhttps://qiita.com/junya/items/4805404624292401030dからコピペしたCSS3のアニメーションを使ったアンダーラインのプログラムです。 このプログラムの十一行目の「content: "";」はどうして何も書かないんですか。 これをかいて何の意味があるんでしょう。

    • 締切済み
    • CSS
  • スクロールで画面が読み込まれたら動くようにしたい

    下記html、cssでテキストを動くようにしたのですがjavascript(jquery)で スクロールで画面が読み込まれたら動くようにしたいのですがどうすれば良いでしょうか。 素人なのでコピペで教えて欲しいです。 html <body> <section> </section> <div class="heading"> <div> <p class="slide-up">テキスト</p> </div> <div> <p class="slide-up">テキスト</p> </div> <div> </div> </body> </body> </body> css body, html { width: 100%; font-family: 'Times New Roman', Times, serif; } section { height: 200vh; } .fadeUp { animation-name: fadeUpAnime; animation-duration: 0.5s; animation-fill-mode: forwards; opacity: 0; } .heading { margin: 80px 0 0 80px; font-size: 15em; line-height: 90%; } .heading>div { overflow: hidden; } .heading>div>p { width: -webkit-max-content; width: -moz-max-content; width: max-content; white-space: nowrap; margin: 0; } div.heading>div { -webkit-animation-delay: 1s; animation-delay: 1s; } .slide-up { -webkit-animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; } @-webkit-keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } } @keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } }

  • 背景色が重なるもしくはつかない

    こんばんは、お世話になります。 背景色が重なる、もしくは色がつかないのですが どのようにしたらよいでしょうか? 因みにヘッダーのメニューの後ろにも灰色を付けています。 ご教示お願いします。 @charset "utf-8"; body { color: lightblue; } .wrapper { width: 960px; margin: 0 auto; overflow: hidden; padding: 0px 0px 10px 10px; } .wrapper .col { float: left; width: 25%; } .wrapper .col .item { display: block; margin: 5px 5px 5px 5px; padding: 10px; } .imgbox img { width: 100%; height: 100%; object-fit: cover; vertical-align: bottom; border-radius:15%; } .fadein { opacity : 0; transform : translate(0, 100px); transition : all 1s; } .fadein.active{ opacity : 1; transform : translate(0, 0); } a.header { display: block; text-decoration: none; } .header { background-color: rgba(0,0,0,.1); margin: 0; } ul{ display: flex; flex-wrap: wrap; } .header ul { display: flex; justify-content: center; } .header li { font-size: 15px; list-style-type: none; } .header li:not(:first-of-type) { margin-left: 1rem; } .header a { color: #000; padding: 20px; } .text li{ width: 50%; padding: 20px; box-sizing: border-box; /* 透過・非表示 */ opacity: 0; visibility: hidden; /* 要素の位置指定・アニメーション */ translate: 0 20px; transition: 1s; } img{ width: 100%; height: auto; } /* クラス付与で表示する */ .is-active{ opacity: 1; visibility: visible; translate: 0 0; } header li{ opacity: 1; visibility: visible; display: block; /* 縦に並べる*/ list-style-type: none; padding: 0.5em; background: #ccc; }

    • ベストアンサー
    • CSS
  • a:hover 時にテキストが表示されません。

    コード初心者です。 コピペしたものを若干数字を変えて使用しようとしましたが、テキストが表示されません。他の解説をみましたが、自分との違いがよく分からないため質問させていただきました。 以下htmlとcssを記載しますので、どなたかご教授いただけないでしょうか・・・・。 html <a href="#" class="button"> <section id="news"> <h2>お知らせ</h2> <p> 9月10日㈭ 遊びに来てね!! </p> </section> </a> css #news{ width: 100%; height: 180px; margin: 0px auto 50px; border-radius: 10px; background-color: rgb(204, 160, 160); } .button{ position: relative; display: block; width: 90%; margin: 0 auto; transition: .3s; color: rgb(41, 35, 35); } .button:hover{ color: aliceblue; } .button::before { position: absolute; width: 100%; height: 180px; border-radius: 10px; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; content: ''; background: rgb(37, 59, 26); transform-origin: right top; transform: scale(0, 1); transition: transform .2s; } .button:hover::before { transform-origin: left top; transform: scale(1, 1); color: ghostwhite; } 宜しくお願い致します!!!!

    • ベストアンサー
    • CSS
  • スムーズに動く アニメーションの作成方法

    主要のブラウザ・OS・端末・各ディスプレイサイズの全てでスムーズに動く アニメーションの作成方法について教えてください。 今までに試した内容は、初めJクエリープラグインのバックストレッチを 試しました。ところがスムーズな動きをさせる為にはコマ数を増やして そのコマをめくる速度を早くしなければならず、元画像の枚数を増やし ソースBODY部分(下記※1)の数値を上げてみましたが、その結果、 ディズプレイやブラウザによってはピカピカッとバグが出てしまいました。 次に同じくJクエリーのJアニを試したところ、今度はスムーズに動きましたが、 元画像データの容量が大体100キロバイト以上になると理由は不明ですが、 PCによっては数回に一度の割合で初めのコマが飛ばされてからの表示、即ち アニメーション途中からの再生表示になってしまいました。アニメーションの 表示サイズを大きくしたかったので、ファイルサイズはそのままで、ソース コードの記述変更にてその画像を拡大表示すれば解決すると思い試しましたが、 今度は「無限ループエラー」(下記※2)となりうまくいきませんでした。 どなたか解決出来る方法をご教示いただけませんでしょうか? 私でも直ぐに解決出来る策を、初心者レベルで恐縮ですが、文面 もしくはソースコードにてご教示いただけませんでしょうか。 私のITスキルに関しては、見よう見まねで情報サイト等から得た ソースコードをいじれる程度のレベルです。なので、もしお手数で したら、参考になる分かりやすいサイトでも構いません。 《必須条件》 Windows・Mac・Android・IOS、IE7以降・Chrome・Safari・ Firefox・オペラ、ディスプレイサイズは16:9と5:4と4:3 上記の全てで正常な閲覧が出来るようにしたいです。 ※1: setInterval(function() { index = (index >= images.length - 1) ? 0 : index + 1; $.backstretch(images[index]); }, 1000); ※2:問題のソースコード。 【Jアニのソースコード】 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ;(function($){ var settings = {}; var element = {}; var currFrame = 0; var tm = null; var winW = $(window).width(); var winH = $(window).height(); $.fn.jani = function(sett){ element = $(this); settings = $.extend({}, $.fn.jani.defaults, sett); function _build(){ element.width(settings.frameWidth); element.height(settings.frameHeight); element.css('background-position', '0 0'); }; _build(); }; $.fn.jani.pause = function(){ if(tm){ clearTimeout(tm); } tm = null; } $.fn.jani.stop = function(){ if(tm){ clearTimeout(tm); } tm = null; currFrame = 0; element.css('background-position', '0 0'); } $.fn.jani.pause = function(){ clearTimeout( tm ); tm = null; } $.fn.jani.play = function(){ if(settings.totalFrames <= 0 || !element || !element.length){ return; } function _animate(){ _animate({width:winW, height:winH}); var tmFn = function(){ _animate(); }; var bgPos = element.css('background-position'); var ie = true; if(bgPos == 'undefined' || bgPos == null){ bgPos = parseInt(element.css('background-position-y')); } else { bgPos = bgPos.split(' '); bgPos = parseInt(bgPos[1]); ie = false; } bgPos -= settings.frameHeight - 1; if(ie){ element.css('background-position-y', bgPos + 'px'); } else { element.css('background-position', ('0px ' + bgPos + 'px')); } currFrame++; if(currFrame > (settings.totalFrames - 1)){ return false; currFrame = 0; element.css('background-position', '0 0'); if(!settings.loop){ return; } } tm = setTimeout(tmFn, settings.speed); } if(tm){ element.jani.stop(); } _animate(); } $.fn.jani.defaults = { frameWidth: 100, frameHeight: 100, speed: 100, totalFrames: 0, loop: false }; })(jQuery); ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 【JアニのINDEX】 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <!doctype html> <html> <head> <meta charset="utf-8"> <title>m-corporation</title> <script type="text/javascript" src="./lib/mco.js"></script> <script type="text/javascript" src="./lib/inaj.js"></script> <script type="text/javascript"> function enlarger(selector, width, height, speed) { $(selector).animate({"width": width,"height": height},speed); } $(function(){ // ロード時 enlarger("#animation-1", 1000, 1000,0); }); </script> <style type="text/css"> .animation-1 { background: url(./images/img.png) no-repeat left top; } </style> </head> <body> <div id="animation-1" style="width:1000px;height:1000px;">animation-1</div> <script type="text/javascript"> $(document).ready(function(){ $('#animation-1').jani({ frameWidth: 400, frameHeight: 61, speed: 110, totalFrames: 49 }); $('#animation-1').jani.play(); }); </script> </body> ーーーーーーーーーーーーーーーーーーーーーーーーー 【Jアニ&バックストレッチの参考URL】 Jani→ http://blog.verygoodtown.com/2010/01/animated-gif-jani/ backstretch→ http://kachibito.net/web-design/backstretch.html http://kachibito.net/web-design/backstretch.html

専門家に質問してみよう