
下記のように「bxSlider」でスライド毎に動画(複数)を再生しようとしていますが、
1番めのスライド(10秒程のmp4動画)は再生されますが、2番めからは再生がスタートしません。
スライド毎に、動画スタートし、ストップしたら、次のスライドに行くようにしたいのです。
ご教授をお願いします。
現在のjavascript
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8. …
<script type="text/javascript" src="jquery.bxslider.min.js"></script>
<link href="jquery.bxslider.css" rel="stylesheet">
<script type='text/javascript'>
$(function() {
var $video = $('#video').get(0);
$slider = $('.bxslider').bxSlider({
infiniteLoop: true,
onSliderLoad : function() {
$video.play();
},
onSlideAfter: function($slideElement, oldIndex, newIndex) {
if ( newIndex == 0 ){
$video.play();
} else {
$video.pause();
$video.currentTime = 0;
$slider.startAuto();
}
}
});
$video.addEventListener("play", function() {
$slider.stopAuto();
});
$video.addEventListener("ended", function() {
$slider.goToNextSlide();
});
});
</script>
</head>
<body>
<div class="bxslider">
<div><video id="video" src="動画1.mp4"></video></div>
<div><video id="video" src="動画2.mp4"></video></div>
<div><video id="video" src="動画3.mp4"></video></div>
</div>
</body>
No.4ベストアンサー
- 回答日時:
ANo3です。
少し長くしたのビデオ(25秒程度)でも試してみましたが、こちらの環境では最後が見える事象は再現しませんでした。(もっと長くないとダメなのかも)
全部のスライドを表示した状態でテストしてみたところ、(当然ではありますが)終了したビデオは最後の状態で停止して、次のビデオが始まります。
2周目はこの状態から始まりますので、playメソッド実行時に、何らかの時間がかかって即座に動画が開始しない場合には最終画像が表示されていることになりそうです。
多分、これがご指摘の原因と推測します。
・・・ということで、ビデオ終了時に巻き戻しておけば(仮に何らかの時間がかかっても)最終画像が表示されることはなく、最初の画像が少し続くということになると思います。
ビデオ終了時に巻き戻し処理を追加して、以下ではいかがでしょうか?
(念のため、pauseも追加しています)
var video = $(".bxslider video");
var slider = $(".bxslider").bxSlider({
infiniteLoop: true,
controls: false,
pager: false,
onSlideAfter: function(elm, oIndex, nIndex){
video.get(nIndex).play();
}
});
video.on("ended", function(){
var v = video.get(slider.getCurrentSlide());
v.currentTime = 0;
v.pause();
slider.goToNextSlide();
}).get(0).play();
試させていただきました。(10秒を5本)
ちゃんと巻き戻ししてて、
一巡しても、二巡しても最後の残像は出なくなりました。
ありがとうございました。(大感謝です!)
お忙しい中お手数をお掛けしました。
No.3
- 回答日時:
ANo1、2です。
>2順目は1順目の動画の最後の映像が残っていて、
>それが消えてから、始まります。
こちらでテストした状況では、endedイベント発生で動画が終了しているので、2回目も最初からスタートしていました。
それなので、無くても行けるものと思って省略してしまいましたが、再生位置を明示的に指定しておくようにすれば、動画の最後が表示されることはなくなるものと推測します。
私がテストしたのは数秒以下の短い動画でしたので、読み込み時間の関係などから違いが出ているのかもしれませんね。(ほとんど知らないも同然なので、よくわかっておりません)
具体的には、ご質問のスクリプトにもある
currentTime = 0
のセットを行っておけば宜しいかと。
今、テストできる環境にないのでわかりませんが、再生直前がよいのか、終了イベント時がよいのかは、ご自身で試してみてください。
No.2
- 回答日時:
ANo1です。
時間がとれたので、簡単に試してみました。
以下でどうでしょうか?(fx52、IE11で動作確認済)
vieo要素の数を増減してもそのままで動作するはずです。
※ インデントを全角空白にしてありますので、ご注意
var video = $(".bxslider video");
var slider = $(".bxslider").bxSlider({
infiniteLoop: true,
controls: false,
pager: false,
onSlideAfter: function(elm, oIndex, nIndex){
video.get(nIndex).play();
}
});
video.on("ended", function(){
slider.goToNextSlide();
}).get(0).play();
ご丁寧にありがとうございました。
試させていただきました。
3つ動画を用意し、1順目は意図したとおり正常に動作するのですが、
2順目は1順目の動画の最後の映像が残っていて、
それが消えてから、始まります。
2順目からも最初の画面から始まるようにはならないでしょうね。
感謝いたします。
No.1
- 回答日時:
こんにちは
video要素は扱ったことがないし試していないので、考え方だけですが…
>2番めからは再生がスタートしません。
ご提示のスクリプトでは最初に、
>var $video = $('#video').get(0);
としているので、$videoは最初のvideo要素だけを意味することになります。
従って、2番目以降のvideo要素を制御する記述がないので、動作しないものと想像します。
多分、これがご質問の事象の一番の原因と思われます。
一方で、HTMLの記述が
><video id="video" ~~
となっていますが、idは重複できないはずですので、文法違反になっていませんか。
また、ご提示のケースではvideo要素は皆同質な扱いなので、個別にidを振る必要もなく、セレクタを"div.bxslider video"などとしておくことで、video要素のリストが取得できるはずです。
上記を修正すれば動作するものと思いますが、ついでながら…
全体の制御に、sliderのstartAuto()、stopAuto()などの記述がありますが、タイミングはvideoに依存するので、sliderのautoPlayは必要ないのではないでしょうか?
sliderの送りは全てスクリプトから制御すると考えれば、以下のように整理できそうです。
1)sliderの初期設定(autoplayは使用しない)
2)slider.onSlideAfterイベントに、
表示中のvideo要素をスタートする処理を設定
3)video要素のendedイベントに、
slideを送る(nextSlide)の処理を設定
(全video要素にまとめて設定しておく必要があります)
上記の準備をしておいて、最初のvideoをスタートしてあげれば、3)と2)のイベントが交互に発生するので、自動的に順に再生されるはずと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript 画像の表示位置 3 2022/12/23 08:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C++] vector<string> の各要素...
-
スプレッドシートのチェックボ...
-
VBAでセル参照して要素の順番を...
-
WebサイトのHTMLオブジェクトの...
-
マウスの入って来た方向を検出...
-
デジタル時計の時刻合わせの方...
-
エクセルのシート上に別のシー...
-
マイページはどこを開くの
-
エクセルVBAでフォームのListbo...
-
Javascript_submit()完了後に処...
-
Outlookでこのような表示がされ...
-
VBの画面で、全ウィンドウを一...
-
Excel操作 ウィンドウで出した...
-
ウィンドウのつかみ方がよく分...
-
小さな表示窓の呼び方は
-
javascriptで開いたウィンドウ...
-
VBScriptでリンクをクリックし...
-
PDFを(htmlのように)無限に縦...
-
IEのウインドウ、複数開いたと...
-
Excelでワードアートや図を常に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++のデバッガでvectorの要素...
-
(VBS) テキストファイル読込で...
-
[C++] vector<string> の各要素...
-
【VBA/HTML】特定のタグ要素に...
-
ajaxで追加したdom要素にscript...
-
bxSliderで動画をスライドごと...
-
ロールオーバーで大きくバナー...
-
VBA スクレイピング
-
WebサイトのHTMLオブジェクトの...
-
jqueryでtable内容の置き換え
-
ModeSwitchの状態の取得方法
-
JavaScriptでクリップボードの...
-
PL/Iについて、教えてください。
-
JQuery、セレクトボックスをル...
-
フォームで入力時自動で次の項...
-
ajax
-
スプレッドシートのチェックボ...
-
ページ全体をスクロールするAja...
-
ハンバーガーメニューが閉じない
-
Ajax.Updaterで読み込んだ先の...
おすすめ情報