cssでアニメーションは記述できますが、任意のタイミングでアニメーションを開始する方法を書きます。
過去に作成したスクロールしたら要素が出るやつ【.offset()】をちょっと改造して作成します。
今回作成するデモはこちら
<仕様>
①ページを読み込むと、2番は2秒後、3番は3秒後に回転する
②5番は要素がちょっと見えてから、3秒後に移動する。(6番も要素がちょっと見えてから、3秒後に移動する)
それでは、解説。
○index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> <title>タイトルだよ</title> <meta name="description" content="ディスクリプションだよ"> <meta name="keywords" content="キーワード1, キーワード2"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/common.css"> <link rel="stylesheet" href="css/index.css"> </head> <body> <!--header--> <header></header> <main ontouchstart=""><div class="Container"> <div class="sideMargin"> <div class="itemBlock"> <div class="block block1"> <p>1</p> </div> <div class="block block2"> <p>2</p> </div> <div class="block block3"> <p>3</p> </div> <div class="block block4"> <p>4</p> </div> <div class="block block5"> <p>5</p> </div> <div class="block block6"> <p>6</p> </div> </div> </div> </div> </main> <!--footer--> <footer> <script src="js/jquery-2.0.0.min.js"></script> <script src="js/index.js"></script> </footer> </body> </html>
・divを6つ用意します。(こいつらをゴニョゴニョします)
○index.css
.Container { padding: 50px 0; background-color: #9e9e9e40; } .sideMargin { padding: 0 10px; } .itemBlock { background-color: white; max-width: 780px; padding: 50px 0; margin: 0 auto; } .block { background-color: blue; height: 100px; width: 100px; margin: 0 auto 50px; } .block p { color: #fff; font-size: 3.0rem; } .block2 { -webkit-animation: roll 3s infinite; animation: roll 3s infinite; -webkit-animation-timing-function: linear; animation-timing-function: linear; -webkit-animation-delay: 2s; animation-delay: 2s; } .block3 { -webkit-animation: roll 3s infinite; animation: roll 3s infinite; -webkit-animation-timing-function: linear; animation-timing-function: linear; animation-direction: reverse; -webkit-animation-delay: 3s; animation-delay: 3s; } @-webkit-keyframes roll { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes roll { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } .block2 { -webkit-animation: roll 3s infinite; animation: roll 3s infinite; -webkit-animation-timing-function: linear; animation-timing-function: linear; -webkit-animation-delay: 2s; animation-delay: 2s; } .block5.slideIn { -webkit-animation: slide 3s infinite; animation: slide 3s infinite; -webkit-animation-timing-function: linear; animation-timing-function: linear; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-delay: 3s; animation-delay: 3s; } .block6.slideIn { -webkit-animation: slide 3s infinite; animation: slide 3s infinite; -webkit-animation-timing-function: linear; animation-timing-function: linear; animation-direction: reverse; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-delay: 3s; animation-delay: 3s; } @-webkit-keyframes slide { 0% { -webkit-transform: translateX(0); transform: translateX(0); } 25% { -webkit-transform: translateX(100%); transform: translateX(100%); } 50% { -webkit-transform: translateX(0); transform: translateX(0); } 75% { -webkit-transform: translateX(-100%); transform: translateX(-100%); } 100% { -webkit-transform: translateX(0); transform: translateX(0); } } @keyframes slide { 0% { -webkit-transform: translateX(0); transform: translateX(0); } 25% { -webkit-transform: translateX(100%); transform: translateX(100%); } 50% { -webkit-transform: translateX(0); transform: translateX(0); } 75% { -webkit-transform: translateX(-100%); transform: translateX(-100%); } 100% { -webkit-transform: translateX(0); transform: translateX(0); } }
①2番と3番のアニメーション
・block2とblock3にはrollと名前のつけたアニメーションを指定します。
①5番と6番のアニメーション
・block5とblock6には、slideと名前のつけたアニメーションを指定します。このとき、slideInというクラスに対してslideアニメーションを記述します。
上記 ) .block5.slideInと.block6.slideInに対してslideと名前のつけたアニメーションを指定しています。
○index.js
$(function(){ $(window).scroll(function(){ var slide5 = $('.block5').offset().top; var slide6 = $('.block6').offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > slide5 - windowHeight){ $('.block.block5').addClass('slideIn'); } if (scroll > slide6 - windowHeight){ $('.block.block6').addClass('slideIn'); } }); });
① if (scroll > slide – windowHeight){}
『隠れている要素が、見えたら』という条件
② $().addClass(‘slideIn’);
$()要素にslideInというクラスを追加する
任意のタイミングで開始したいアニメーションを記述したクラスを追加することで、アニメーションを開始している。
一見長い記述ですが、やっていることはシンプルです。
今回は以上です。