前提・実現したいこと
固定した背景画像がスクロールで切り替わり、
さらにスクロール量に応じて徐々に拡大されていくページを作りたいです。
イメージとしては
地図を徐々に拡大していくような感じです。
(上にスクロールすると徐々に縮小する)
1枚目:宇宙から地球をみた風景
2枚目:雲の上から日本大陸をみた風景
3枚目:空から東京を見た風景
4枚目:東京タワーを上から見た風景
・・・
このようにスクロールに応じて、徐々にズームしていくようなページを作りたいのですが、
「固定した背景画像がスクロールで切り替え」までは実装できたのですが、
(下記サイトを参考にしました)
固定した背景画像がスクロールで切り替わる実装サンプル
「スクロール量に応じて徐々に拡大されていく」という部分の実装がうまくできず困っております。
該当のソースコード
html
1<div class="m-main-content"> 2 <section> 3 <div class="one bg01"> 4 <div class="bg _01" id="bg01"></div> 5 </div> 6 </section> 7 <section> 8 <div class="one bg02"> 9 <div class="bg _02" id="bg02"></div> 10 </div> 11 </section> 12 <section> 13 <div class="one"> 14 <div class="bg _03" id="bg03"></div> 15 </div> 16 </section> 17 <section> 18 <div class="one"> 19 <div class="bg _04" id="bg04"></div> 20 21 </div> 22 </section> 23 <section> 24 <div class="one"> 25 <div class="bg _05" id="bg05"></div> 26 </div> 27 </section> 28</div>
CSS
1section { 2 display: flex; 3} 4.one { 5 display: flex; 6 align-items: center; 7 width: 100%; 8 min-height: 100vh; 9 padding: 20px; 10 height: 200vh; 11} 12.bg { 13 position: fixed; 14 top: 0; 15 left: 0; 16 right: 0; 17 width: 100%; 18 height: 100vh; 19 background-position: center center; 20 background-size: cover; 21 background-repeat: no-repeat; 22 opacity: 0; 23 transition: all 0.5s ease 0s; 24 z-index: -1; 25} 26.show .bg { 27 opacity: 1; 28} 29.bg._01 { 30 background-image: url(../img/index/scene01.png); 31} 32.bg._02 { 33 background-image: url(../img/index/scene02.png); 34} 35.bg._03 { 36 background-image: url(../img/index/scene03.png); 37} 38.bg._04 { 39 background-image: url(../img/index/scene04.png); 40} 41.bg._05 { 42 background-image: url(../img/index/scene05.png); 43}
Jquery
1// スクロール量で背景変更 2$(function () { 3 $(".one").each(function (i, elem) { 4 var one = $(elem).offset().top; 5 $(window).on("load scroll resize", function () { 6 var two = $(window).height(); 7 var three = $(window).scrollTop(); 8 var showClass = "show"; 9 var timing = 300; // 300px, add to css 10 if (three >= one - two + timing) { 11 $(elem).addClass(showClass); 12 } else { 13 $(elem).removeClass(showClass); 14 } 15 }); 16 }); 17});
試したこと
transform: scale()を使えば良いかと思い
下記コードを試しましたが、『スクロール量に応じて』という部分ができず、
セクションに入ったらすぐ拡大をしてしまうので、他の方法を探しております。。。
css
1.bg { 2 transform: scale(0); 3} 4.show .bg { 5 transform: scale(2); 6}
1日調べていたのですが、どうしても答えがわからずこちらで質問をさせていただきました。
有識者の方がいらっしゃいましたら、ご教授いただけますと大変嬉しいです。
お手数ですが、どうぞよろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/23 01:04