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

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

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

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

HTML

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

Q&A

解決済

1回答

3188閲覧

自動挿入されたvideoタグにjQueryでmutedを追加したいです。

mabo1114mo

総合スコア3

jQuery

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

HTML

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

0グッド

0クリップ

投稿2020/08/15 19:22

編集2020/08/16 05:30

1.HTMLの<a>タグにmp4をリンク先にしています。
2.<a>タグをクリックすると<video>タグが自動で挿入されます。
3.この時にjQueryでvideoタグにmutedを追加したいと考えております。
おそらくmutedをつければ自動再生されるのでは・・・と思ってます。

下記のように書いてみましたが、駄目でしたので、ご教示して頂けると助かります。
宜しくお願いいたします。

※書き忘れましたが、
・chromeでは正常に動作します。
・Safariだと画面中央に小さい長方形が表示されこれをクリックすれば正常に再生されます。
(1回目のクリックで正常に再生させたいです)

・IE11だと「mp4を開くか、または保存しますか?」と表示され、再生がされない。
(再生されるようにしたいです。)

HTMLコード

<div class="swiper-slide"> <a href="movie/test.mp4" data-lity="data-lity"> <img src="img/slider/test.png"> </a> </div>

Jqueryコード

$(function(){ $(document).on('click', '.swiper-slide a',function(){ $('video').prop('muted',true); }); });

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

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

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

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

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

guest

回答1

0

ベストアンサー

いろいろと勘違いされています。

まず、aタグについてです。
href属性でurlが設定されている以上、クリックすればそのページを開きにいきます。
今回の場合は movie/test.mp4 にページ遷移するので現在のページの処理は無視されます。
開いている現在のページで映像を表示させるようにするなら、この書き方ではダメです。

次にjQueryについてです。

Javascript

1$(function(){ 2 $(document).on('click', '.swiper-slide a',function(){ 3 $('video').prop('muted',true); //ここがvideoタグに消音を指定している 4 5 }); 6});

jqueryの書き方自体に問題はありませんが、消音を指定するvideoタグがHTMLのどこにもありません。
その為、あらかじめvideoタグを挿入した後にこのコードを実行する必要があります。

こんな感じでどうでしょう

HTML

1<div class="swiper-slide"> 2 <a data-lity="data-lity"> <!-- リンクであるhrefは消します --> 3 <img src="img/slider/test.png"> 4 </a> 5</div>

Javascript

1$(function(){ 2 $('.swiper-slide a').on('click',function(){ 3 $(this).after('<video controls autoplay>'); //videoタグをaタグの次に追加 4 $('video').append('<source src="movie/test.mp4">'); //videoタグの中にsourceタグを追加 5 $('video').prop('muted',true); //追加した 6 }); 7});

20200817修正、lity.js が使用されている前提

lity.jsを詳しくは知りませんが、画面に挿入される動画は iframe によって表示されます。
なので iframe の中に存在する video 要素に対して消音を設定する必要があります。

その際に前提として、iframe の中の要素を操作する場合、
iframe で開かれるファイルが同じサーバー上に存在していなければならないので注意してください。

いろいろサイトを調べてみるとlity.jsに限らず、
videoの自動再生についてはブラウザによってかなり挙動が怪しいようです。
IE11については場合によってはあきらめた方がいいかもしれません…。
少なくとも自分では解決できそうにないです。

それではコードです。

Javascript

1$(function(){ 2 $('.swiper-slide a').on('click',function(){ 3 setTimeout(function(){ 4 $('iframe').contents().find('video').get(0).muted = true; 5 /* 6 $('iframe').contents().find('video').get(0).play(); 7 $('iframe').contents().find('video').get(0).pause(); 8 $('iframe').contents().find('video').get(0).currentTime = 0; 9 setTimeout(function(){ $('iframe').contents().find('video').get(0).play(); },500); 10 */ 11 },1000); 12 }); 13});

とりあえずこれが正しいやり方とは思いませんが、
aタグをクリックしてすぐはまだvideo要素が追加されていません。
その為、iframeとvideoが出力されるのを setTimeout関数を使って待ちます。
この例では 1000ms 待たせています。

もし、消音を実行しても症状が改善されなかった場合、
コメントアウトを解除して追加の4行も実行させてみてください。

こちらではコメントアウトを解除すると…

  1. ミュートにする
  2. 再生する
  3. 一時停止する
  4. 再生時間を初期化
  5. 500ms後に再生する

が実行されます。
Javascript側からの命令で動画を動かしてみる、ということですね。

こちらで上手くいかないとなると、申し訳ないですが自分はお手上げです。

投稿2020/08/16 00:47

編集2020/08/17 05:40
phiar_poet

総合スコア230

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

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

mabo1114mo

2020/08/16 05:31 編集

ありがとうございます。 頂いたコードで試した所、動画再生の画面が2つ(videoタグが2つ)出てしまいました。 jQueryで挿入したのとは別のもう1つのvideoタグですが、lity.jsの仕様なのか<a>タグのhrefにmp4を指定してからクリックすると自動で挿入されるようです。 可能であれば、自動で挿入されるvideoタグにmutedを入れたいのですが、可能でしょうか?
phiar_poet

2020/08/17 05:24

最初の質問で lity.js を使用している旨が特に記載されていなかったので分かりませんでしたが、 そもそも lity.js によって追加された要素に対して muted を設定したいという話なのですね? そうするとまた別の処理が必要になります。 lity.js で挿入されるのは iframe であり、その中に video が存在しています。 mutedを指定することで他のブラウザで動くようになるとは限りませんが 回答を編集いたしますのでしばらくした後にご確認ください。
mabo1114mo

2020/08/17 08:12

お世話になります。 情報の提供不足で申し訳ありませんでした。 無事、コメントアウトせずに希望通りの動作が確認できました。 困っておりましたので、本当に助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問