質問するログイン新規登録
JavaScript

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

HTML

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

Q&A

解決済

1回答

1508閲覧

スクロールして各動画が画面内に入った瞬間に動画を再生したい。

nari10

総合スコア1

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2023/04/04 10:41

編集2023/04/04 10:43

0

0

実現したいこと

スクロールして各動画が画面内に入った瞬間に動画を再生したい。

前提

videoタグで動画を挿入しているページを作成しています。
ページ内で動画が6つあります。

発生している問題

デバイス、ブラウザによっては、画面に一番上の動画部分が見え始めた時に、二番目以降の動画も同時に再生されてしまい、動画の冒頭が見えなくなってしまいます。
私がこの問題を確認できたのは、
PCのfire fox、IOSのChrome、fire foxでした。
PCのChrome、Safari、IOSのSafariでは、各動画が画面内に入った瞬間に動画が再生されました。
初心者でしてわからないことが多く、聞ける人も周りにいないため、こちらを使わせていただきました。どなたかご教授いただけると幸いです。

該当のソースコード

HTML

1 <div class="video_wrap"> 2 <video loop autoplay muted playsinline> 3 <source src="movie01.mp4" type="video/mp4"> 4 </video> 5 </div> 6 <div class="video_wrap"> 7 <video loop autoplay muted playsinline> 8 <source src="movie02.mp4" type="video/mp4"> 9 </video> 10 </div> 11 <div class="video_wrap"> 12 <video loop autoplay muted playsinline> 13 <source src="movie03.mp4" type="video/mp4"> 14 </video> 15 </div> 16 <div class="video_wrap"> 17 <video loop autoplay muted playsinline> 18 <source src="movie04.mp4" type="video/mp4"> 19 </video> 20 </div> 21 <div class="video_wrap"> 22 <video loop autoplay muted playsinline> 23 <source src="movie05.mp4" type="video/mp4"> 24 </video> 25 </div> 26 <div class="video_wrap"> 27 <video loop autoplay muted playsinline> 28 <source src="movie06.mp4" type="video/mp4"> 29 </video> 30 </div>

javascript

1$(window) 2 .on('scroll resize', function () { 3 // ウインドウのスクロール量取得 4 var windowScrollTop = $(window).scrollTop(); 5 // ウインドウの高さ取得 6 var windowInnerHeight = window.innerHeight; 7 8 var $video = $('video'); 9 // videoがページの最上部からどの位置にあるか取得 10 var videoTop = $('video').offset().top; 11 // videoの高さ取得 12 var videoHeight = $('video').innerHeight(); 13 14 // videoが停止している、かつvideoが画面内に入ってきた場合、再生処理 15 if ($video[0].paused && (windowScrollTop + windowInnerHeight > videoTop)) { 16 $video[0].play(); 17 } 18 19 // videoが再生中、かつ画面外に出た場合、停止処理 20 if (!$video[0].paused && ((windowScrollTop + windowInnerHeight < videoTop) || (windowScrollTop > videoTop + videoHeight))) { 21 $video[0].pause(); 22 } 23 }) 24 .trigger('scroll');

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

1 var $video = $('video'); 2 // videoがページの最上部からどの位置にあるか取得 3 var videoTop = $('video').offset().top; 4 // videoの高さ取得 5 var videoHeight = $('video').innerHeight();

$video には複数の video 要素が入っているはずなのに、最初の要素しか処理してないように見えます。each() で個々の video 要素の処理をすべきでしょう。

js

1$('video').each(function(index, video) { 2 const videoTop = $(video).offset().top; 3 const videoHeight = $(video).innerHeight(); 4 ...

投稿2023/04/04 21:47

int32_t

総合スコア21942

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

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

nari10

2023/04/05 10:38

ありがとうございます! 以降の$videoを$(this)とすることで思い通りの動作になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問