接着https://blog.csdn.net/nihaoqiulinhe/article/details/80430378的问题

<div id=\"video-box\">
 <video style=\" -fit: fill;width: 200px;height: 50px;\" controls>
    <source src=\"\">
  </video>
</div>
<a class=\"dj\" href=\" :;\" 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();
});

答案如下:
通过 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 标签的方式,可以触发浏览器进行重排,从而去获取相应地址的文件进行播放。


上述可以动态改变的单个source的src但再切换别的src还是会显示第一个播放的视频的src,
正确方法是连同video标签一起换了
\"在这里插入图片描述\"

收藏 打印