通过 jquery 动态的设置 video src 的值无法播放视频?
| <div id="video-box"> | |
|  <video style="object-fit: fill;width: 200px;height: 50px;" controls> | |
|     <source src=""> | |
|   </video> | |
| </div> | |
| <a class="dj" href="javascript:;" data-src="http://www.w3school.com.cn/i/movie.mp4">点击</a> | |
| *{padding:0;margin:0;} | |
| #video-box{display:none;} | |
| $(".dj").on("click", function() { | |
|    var src = $(this).data("src"); | |
|    $("#video-box source").prop("src",src) | |
|    $("#video-box").show(); | |
| }); | 
<font color=#FF0000> 答案如下:</font>
通过 jQuery 确实是给 source 的 src 赋值成功,从调试来看,浏览器并没有去发起请求去获得相应的视频,
而只是单纯的将 a 标签的 data-src 中的值赋值给 source 了。
但是如果这么做,浏览器就会去请求地址获得视频文件:
| $(".dj").on("click", function() { | |
|    var src = $(this).data("src"), | |
|        sourceDom = $("<source src=\""+ src +"\">"); | |
|    $("#video-box video").append(sourceDom); | |
|    $("#video-box").show(); | |
| // 自动播放 | |
|    $("#video-box video")[0].play() | |
| }); | 
因此,可以推断出来的是,当 video 中存在 source 标签的时候,浏览器渲染之后会自动去获取地址,即便地址改变,
浏览器也不会再去获取地址。但是通过动态的插入 source 标签的方式,可以触发浏览器进行重排,从而去获取相应地址的文件进行播放。
上面那个方法,经测试,只能上传一次的时候是有效果的,如果要替换多次视频地址,就会显示第一次的视频,还有有一点问题,
可以使用如下方式修改视频的播放地址,参考链接:https://bbs.csdn.net/topics/392007814
| <div class="thumbImage" id="video-box" style="display: none;"> | |
| 	<!-- <img src="/allone-openaccount/resources/images/videoopen.png" id="image_people"/> --> | |
| 	<video id="videoid" width="280" height="188" controls="controls" autoplay="autoplay"> | |
| 	   <!-- <source src="/i/movie.ogg" type="video/ogg" /> --> | |
| 	  <source id="video_path" src="" type="video/mp4" /> | |
| 	  <!--  <source src="/i/movie.webm" type="video/webm" /> | |
| <object data="/i/movie.mp4" width="320" height="240"> --> | |
| 	   <embed width="320" height="240" src="/i/movie.swf" /> | |
| 		<!--  </object> --> | |
| 	</video> | |
| 						</div> | |
| var videoSrc = data.videoUrl;//新的视频播放地址 | |
|  document.getElementById("videoid").src=videoSrc ; | |
|  document.getElementById("videoid").play(); | 
