ヘッダーは固定し、画面をスクロールするとヘッダーの画像を変え、
同時にテキストの色と背景色を変えたいと考えています。
具体的には
スクロールが0のときは初期設定の画像・色のままですが、
スクロールが0を超えると画像・色が変化します。
逆にスクロールが0に戻ると画像・色も元に戻ります。
そして変化時間ですが、瞬時に変化するのではなく、
時間をかけて変化させたいのです。
そこで次のようなHTML、CSS、jQueryを書きました。
HTML
1<header> 2 <h1> 3 <a href=""> 4 <img src="img/logo01.png" alt=""> 5 <span>タイトル</span> 6 </a> 7 </h1> 8</header> 9<div> 10 メインコンテンツ 11</div>
CSS
1header { 2 position: fixed; 3 top: 0; 4 left: 0; 5 background: black; 6 transition: 5s; 7} 8 9header.scroll { 10 background: white; 11} 12 13a { 14 color: white; 15 transition: 5s; 16} 17 18.scroll a { 19 color: black; 20} 21 22div { 23 margin-top: -100px; 24 height: 2000px; 25 background: green; 26}
jQuery
1$(function () { 2 3 $(window).on('scroll', function () { 4 5 if ($(this).scrollTop() > 0) { 6 7 $('img').fadeOut(2500, function(){ 8 $('img').attr('src', 'img/logo02.png'); 9 $('img').fadeIn(2500); 10 }); 11 12 $('header').addClass('scroll'); 13 } else { 14 15 $('img').fadeOut(2500, function(){ 16 $('img').attr('src', 'img/logo01.png'); 17 $('img').fadeIn(2500); 18 }); 19 20 $('header').removeClass('scroll'); 21 22 } 23 }); 24}); 25
けれどこのjQueryのコードだと、スクロールし続ける限り、延々と画像が点滅するんですね。
わたしとしては最初のスクロールのときだけ、
つまりスクロール量が0と1の間のときに変化が起きればいいだけなので、
このように延々と画像が点滅するのは望んでいません。
もしかしたらoffset()などを使ってコードを書けばいいのかもしれませんが、
書き方がよくわかりません。
また変化に関して気にしていることがあり、
私の書いたコードでは画像と色の変化が変化するタイミングが一致していません。
この画像と色の変化のタイミングを合わせたいのです。
書き方が分かる方がおられましたら、ご教授ください。
わたしの書き方と全く違う書き方でも構いません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/07 10:35
2021/01/07 14:27
2021/01/07 14:34