🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

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

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

812閲覧

html/jsでスクロール途中で画像を切り替える実装をしたい

nyoro

総合スコア16

HTML5

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

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/10 02:01

編集2019/12/10 02:18

https://codepen.io/yutas01/pen/povgqez

上記のURLにソースがあるのですが、それぞれの水玉が下の水玉に押し出され、画面の半分以上上に来たら灰色に変化するという動きを実装したいのですが、少しスクロールしただけで全ての水玉が灰色になってしまいます。どのような記述をすればよいのでしょうか。

それと、現在position: sticky; を使用して押し出される動きを付けているのですが、このプロパティがIE11に対応していません。
どうしても対応させたく様々なプラグインを試してみたのですが、挙動がおかしくなってしまったので、position: sticky;を使用しないで押し出される方法にしたいです。
なるべく自分で考えようと思い、positon: relative;positon: fixed;をjsで制御させて実装しようと思ったのですが、上手くできなかったので、こちらで質問させて頂きます。(質問丸投げになってしまい、申し訳ありません。。)

html

1<div class="container"> 2 <div class="cont1"> 3 <div class="drop-img drop-img2"> 4 <img src="https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0" alt=""> 5 <p class="drop-year"> 6 2019 7 </p> 8 </div> 9 </div> 10 <div class="cont2"> 11 <div class="drop-img drop-img3"> 12 <img src="https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0" alt=""> 13 <p class="drop-year"> 14 2018 15 </p> 16 </div> 17 </div> 18 <div class="cont3"> 19 <div class="drop-img"> 20 <img src="https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0" alt=""> 21 <p class="drop-year"> 22 2017 23 </p> 24 </div> 25 </div> 26 <div class="cont4"> 27 <div class="drop-img"> 28 <img src="https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0" alt=""> 29 <p class="drop-year"> 30 2016 31 </p> 32 </div> 33 </div> 34</div>

css

1.container { 2 position: relative; 3 4 &::before { 5 content: ''; 6 position: absolute; 7 left: 0; 8 right: 0; 9 background: #00a0e9; 10 width: 3px; 11 height: 100%; 12 margin: auto; 13 } 14} 15 16.drop { 17 &-img { 18 position: sticky; 19 top: 45%; 20 text-align: center; 21 right: 0; 22 left: 0; 23 24 img { 25 width: 80px; 26 } 27 } 28 29 &-year { 30 position: absolute; 31 color: #fff; 32 left: 0; 33 right: 0; 34 top: 20px; 35 } 36} 37 38.cont1 { 39 background: #FFDEFF; 40 height: 600px; 41 text-align: center; 42} 43 44.cont2 { 45 background: #DEFFFF; 46 height: 600px; 47 text-align: center; 48} 49 50.cont3 { 51 background: #FFFFDE; 52 height: 600px; 53 text-align: center; 54} 55 56.cont4 { 57 background: #C7FFC7; 58 height: 600px; 59 text-align: center; 60} 61

js

1$(function() { 2 $(window).scroll(function() { 3 var wH = $(window).height(); 4 var dropH = $('.drop-img').offset().top; 5 6 if ( dropH < $(window).scrollTop() + (wH/2)) { 7 $('.drop-img').children('img').attr('src', 'https://dl.dropbox.com/s/ns0be5m1vp0611t/drop_gray.png?dl=0'); 8 } else { 9 $('.drop-img').children('img').attr('src', 'https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0'); 10 } 11 }) 12});

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

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

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

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

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

miyabi_takatsuk

2019/12/10 02:13

謝る前に丸投げにならない質問を心がけましょう。 ソースコードは、コードペンのURLを張り付けるのではなく、 質問本文に含めていただけないでしょうか?
nyoro

2019/12/10 02:19

すみません。質問文下部にソースコードを追加させて頂きました。
azuapricot

2019/12/10 02:25

dropH < $(window).scrollTop() + (wH/2) 最初にスクロールした時点でここの判定が既にTrueになって灰色画像になるようになってますよね もう一度計算を見直してみては?
guest

回答2

0

ベストアンサー

1つ目の質問のみですが

javascript

1$(window).scroll(function() { 2 var wH = $(window).height(); 3 //すべての$('.drop-img')に対して判定を掛けていたので、いっぺんにグレーに変わってしまう 4 //個々の$('.drop-img')に対して、判定を掛けました 5 $('.drop-img').each(function(){ 6 var dropH = $(this).offset().top; 7 if ( dropH < $(window).scrollTop() + (wH/2)) { 8 $(this).children('img').attr('src', 'https://dl.dropbox.com/s/ns0be5m1vp0611t/drop_gray.png?dl=0'); 9 } else { 10 $(this).children('img').attr('src', 'https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0'); 11 } 12 }); 13})

投稿2019/12/10 02:25

satoshi_tajima

総合スコア337

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

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

nyoro

2019/12/10 02:59

eachメソッドというのがあるのですね...勉強になります。。 動かしてみたのですが確かに一つ一つ色が変わりました。 ありがとうございます!
guest

0

下記を実装してみて、値の変化を見てください。
dropH を変えれば実装できそうだとわかります。

html

1 <!-- <div class="container">に含める --> 2 <div id="test1" style="position:fixed; top:0px"></div> 3 <div id="test2" style="position:fixed; top:16px"></div> 4 <div id="test3" style="position:fixed; top:32px"></div> 5 <div id="test4" style="position:fixed; top:48px"></div>

javascript

1$(window).scroll(function() { 2 var wH = $(window).height(); 3 $("#test1").text(wH); 4 var dropH = $('.drop-img').offset().top; 5 $("#test2").text(dropH); 6 7 if ( dropH < $(window).scrollTop() + (wH/2)) { 8 $("#test3").text($(window).scrollTop()); 9 $("#test4").text($(window).scrollTop() + (wH/2)); 10 11 12 $('.drop-img').children('img').attr('src', 'https://dl.dropbox.com/s/ns0be5m1vp0611t/drop_gray.png?dl=0'); 13 } else { 14 $('.drop-img').children('img').attr('src', 'https://dl.dropbox.com/s/rkox4afc0kmkfj1/drop.png?dl=0'); 15 } 16})

どうしても対応させたく様々なプラグインを試してみたのですが、挙動がおかしくなってしまったので、position: sticky;を使用しないで押し出される方法にしたいです。

Polyfillの導入を検討してみてください

投稿2019/12/10 02:31

makosankibu

総合スコア289

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問