質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

4967閲覧

スクロール時に要素が拡大する動作をjavascriptで実装したい

suzu1234

総合スコア41

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2022/08/27 10:33

前提

①のサイトを模写しています。トップに表示してある花の画像のようにスクロール時に画像が拡大する動作を実装したく、ネットで調べたところ②のサイトに行きつきました。しかし、②のサイトではコードがjQueryで書かれていたため、javascriptで実装するために試行錯誤していたのですが、詰まってしまったのでお知恵を拝借したく質問させていただきました。

①:https://code-step.com/demo/html/gallery/
②:https://nnc-studio.jp/plugin/2021/07/05/ani_size/

調べたこと

javascriptで実装するにあたりjQueryで使用されている各部分の意味を調べました。

ーーーーーーーー
$winH = $win.height()

ブラウザの表示領域の高さ
ーーーーーーーー
position = $connect.offset().top

document上にある拡大したい要素のY座標を取得
ーーーーーーーー
scroll = $win.scrollTop();

サイトの一番上からブラウザの表示領域がスクロールした距離
ーーーーーーーー

わからないこと

②のサイトのjQueryで以下の項目が分かりません。

ーーーーーーーー
scroll > position - $winH

if文が使用されているので、”もし scroll > position - $winH が成立した時”、ということはわかるのですが、scroll > position - $winHが具体的にどういう動きになるのかどうかがイマイチわかりません。
ーーーーーーーー
current = (1 - (position - scroll) / $winH) * 2;

こちらに関してはどうして1から(position - scroll) / $winH) を引くのか?どうして2をかけているのか?全く分かりません…
ーーーーーーーー

該当のソースコード

$('.p-jon__item').each(function(){ var $win = $(window), $winH = $win.height(), $connect = $(this), position = $connect.offset().top, current = 0, scroll; $win.on('load scroll', function(){ scroll = $win.scrollTop(); current = (1 - (position - scroll) / $winH) * 2; if (scroll > position - $winH) { $connect.css('transform', 'scale(' + current + ')'); } if (current > 1) { current = 1; } }); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

①のサイトを模写しているなら、そのサイトのコードを見た方がいいのでは。
デベロッパーツールで簡単に見ることができます。
HTMLはElementsタブでみることができます。
JSコードはSourcesタブ内のmain.jsで見ることができます。

②のサイトは、動きは似てますが、やっていることは微妙に違いますので、そのままでは同じ動きにはなりません。

①のサイトでやっていることの方がずっと単純で、ウィンドウのスクロール位置に応じてメインビジュアルの幅を変更しているだけです。必要なのは、ウィンドウのスクロール位置だけです。

模写先のコードをそのままコピーするのは憚られるので、要点だけ抜き出すと、

html

1<main> 2 <div id="mainvisual"> 3 <img src="mainvisual1.jpg" alt=""> 4 <img src="mainvisual2.jpg" alt=""> 5 <img src="mainvisual3.jpg" alt=""> 6 </div> 7 <div class="contents"> 8 <h1>contents</h1> 9 </div> 10</main>

css

1#mainvisual { 2 display: flex; 3 justify-content: center; 4 overflow-x: hidden; 5} 6#mainvisual img { 7 width: calc(100%/3); 8 height: 100vh; 9 flex-shrink: 0; 10 object-fit: cover; 11} 12.contents { 13 height: 100vh; 14 font-size: 3rem; 15}

js/jQuery

1$(window).on('load resize scroll', function() { 2 // スクロール位置を取得 3 let scroll = $(window).scrollTop(); 4 // メインビジュアルのCSS(width)を変更する 5 $('#mainvisual img').css({ 6 'width': 100/3 + scroll/10 + '%' 7 }); 8}

CodePenサンプル

ウィンドウのスクロール位置は、
jQueryなら$(window).scrollTop()
生JSなら、window.scrollYです。

window.scrollY - Web API | MDN

$('#mainvisual img') というような要素の取得は、Document.querySelector() に置き換えます。

Document.querySelector() - Web API | MDN

イベントの付与はaddEventListenerで。
EventTarget.addEventListener() - Web API | MDN

↓生JSのサンプルコード
CodePenサンプル

投稿2022/08/27 15:15

編集2022/08/27 16:09
hatena19

総合スコア34362

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzu1234

2022/08/31 02:27

ご回答ありがとうございます。コードまで記載いただきまして大変助かります。2点ほどわからない点があったので教えていただけますと幸いです。 JSの7行目にある「100/3 + scroll/10 + '%';」の「scroll/10」と「’%’」はどういった意味なのでしょうか? JS11行目の「["load", "resize", "scroll"]」は3つの画像を指しているのでしょうか?
hatena19

2022/08/31 03:53

画像の幅を%で指定してます。 初期状態(スクロール位置0)は、100/3(33.33)%の幅、 スクロールするにつれて、スクロール量の 1/10 を加算する、つまり画像サイズが大きくなる、ということです。 ["load", "resize", "scroll"]は、3つのイベントをまとめて記述するために配列に格納しておいて、 forEach でループさせて addEventListenerで関数と関連付けてます。
suzu1234

2022/09/01 17:43

時間がかかってしまったのですが、教えていただいた情報をもとに何とか意図した動作を実装することができました。詰まっていたので大変助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問