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

回答編集履歴

1

追記

2020/08/17 05:40

投稿

phiar_poet
phiar_poet

スコア230

answer CHANGED
@@ -38,4 +38,56 @@
38
38
  $('video').prop('muted',true); //追加した
39
39
  });
40
40
  });
41
- ```
41
+ ```
42
+
43
+ ### 20200817修正、lity.js が使用されている前提
44
+
45
+ lity.jsを詳しくは知りませんが、画面に挿入される動画は iframe によって表示されます。
46
+ なので iframe の中に存在する video 要素に対して消音を設定する必要があります。
47
+
48
+ その際に前提として、iframe の中の要素を操作する場合、
49
+ **iframe で開かれるファイルが同じサーバー上に存在していなければならないので注意してください。**
50
+
51
+ いろいろサイトを調べてみるとlity.jsに限らず、
52
+ videoの自動再生についてはブラウザによってかなり挙動が怪しいようです。
53
+ IE11については場合によってはあきらめた方がいいかもしれません…。
54
+ 少なくとも自分では解決できそうにないです。
55
+
56
+ それではコードです。
57
+
58
+ ```Javascript
59
+ $(function(){
60
+ $('.swiper-slide a').on('click',function(){
61
+ setTimeout(function(){
62
+ $('iframe').contents().find('video').get(0).muted = true;
63
+ /*
64
+ $('iframe').contents().find('video').get(0).play();
65
+ $('iframe').contents().find('video').get(0).pause();
66
+ $('iframe').contents().find('video').get(0).currentTime = 0;
67
+ setTimeout(function(){ $('iframe').contents().find('video').get(0).play(); },500);
68
+ */
69
+ },1000);
70
+ });
71
+ });
72
+ ```
73
+
74
+ とりあえずこれが正しいやり方とは思いませんが、
75
+ aタグをクリックしてすぐはまだvideo要素が追加されていません。
76
+ その為、iframeとvideoが出力されるのを setTimeout関数を使って待ちます。
77
+ この例では 1000ms 待たせています。
78
+
79
+ もし、消音を実行しても症状が改善されなかった場合、
80
+ コメントアウトを解除して追加の4行も実行させてみてください。
81
+
82
+ こちらではコメントアウトを解除すると…
83
+
84
+ 1. ミュートにする
85
+ 2. 再生する
86
+ 3. 一時停止する
87
+ 4. 再生時間を初期化
88
+ 5. 500ms後に再生する
89
+
90
+ が実行されます。
91
+ Javascript側からの命令で動画を動かしてみる、ということですね。
92
+
93
+ こちらで上手くいかないとなると、申し訳ないですが自分はお手上げです。