jQueryのanimateメソッドを利用して、要素を動かそうしております。
やり方としては、指定した要素の位置をoffsetで取得し、スクロールしてその位置まで来たらモノが動き出すということをしております。
試したところ、実際にその位置までスクロールしたときに要素は動くのですが、、
希望としてはその位置を超えてないときはまた元の位置に戻しときたいです。
つまりその位置にスクロールで到達するたびに、アニメーションが実装されるようにしたいのです
<!doctype html> <html lang="jp"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP::wght@400;500;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;600;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="common/style.css"> <title>test</title> </head> <body> ここから下に要素があります↓ <img id="test1" src="common/img/test1.png"> <img id="test2" src="common/img/test2.png"> <img id="test3" src="common/img/test3.png"> <img id="test4" src="common/img/test4.png"> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> <script src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js'></script> <script src="common/script.js"></script> </body> </html>
cssコード
#test1{ position: absolute; left: 0; right: 0; margin: auto; top:6.38vw; width:30.27vw; height:9.93vw; z-index:4; } #test2{ position: absolute; left: 0; right: 0; margin: auto; top:19.65vw; width:59.2vw; height:10.77vw; z-index:3; } #test3{ position: absolute; left: 0; right: 0; margin: auto; top:32.3vw; width:57.71vw; height:7.4vw; z-index:2; } #test4{ position: absolute; left: 0; right: 1vw; margin: auto; top:43.54vw; width:50.21vw; height:6.04vw; z-index:1; }
jsコード
$(function(){ function animation(){ $('#test4').each(function(){ //ターゲットの位置を取得 var target = $('#test4').offset().top; //スクロール量を取得 var scroll = $(window).scrollTop(); //ウィンドウの高さを取得 var windowHeight = $(window).height(); //ターゲットまでスクロールするとフェードインする if (scroll > target - windowHeight){ $('#test4').animate({'top':'32.3vw'},1000); $('#test2').animate({'top':'32.3vw'},1000); setTimeout(function(){ $('#test1').animate({'top':'32.3vw'},1000);},1000); } }); } animation(); $(window).scroll(function (){ animation(); }); });
試したこと
1.if文のあとにelse文を書いて、それぞれを、もとのtopの位置に戻すことをしたのですが、動いてくれません。
エラー文は特に出ておりませんでした。
else{ $('#test4').animate({'top':'43.54vw'},1000); $('#test2').animate({'top':'19.65vw'},1000); }
2.elseにanimateではなくcssを使ったのですがこれもうまくいきませんでした
else{ $('#test4').css('top','43.54vw'); $('#test2').css('top','19.65vw'); }
if文の中は動作するのですが一回実装されるのみでそのあとはいくらスクロールしても移動後の位置に止まったままです.
どなたかわかる方おりましたら、ご回答宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー