index.html 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <!--
  8. Chrome 浏览器的视频自动播放策略
  9. 1.始终允许静音模式下自动播放
  10. 2.在以下的情况中,带声音播放会被允许:
  11. ①用户已经与当前的域进行了交互(也就是click,tap事件)。
  12. ②在桌面设备上,用户的媒体参与度指数阈值已经超过,这意味着用户之前播放过有声视频。
  13. ③用户已经将网站添加到移动设备上的主屏幕或允在桌面上安装了PWA。
  14. 3.顶部帧可以将自动播放权限委派给其iframe,来允许自动播放声音
  15. 媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。
  16. 可以通过:chrome://media-engagement/ 查看
  17. -->
  18. <style>
  19. * {
  20. margin: 0;
  21. padding: 0;
  22. }
  23. body {
  24. display: flex;
  25. justify-content: center;
  26. }
  27. video {
  28. width: 800px;
  29. height: 600px;
  30. }
  31. .box {
  32. position: relative;
  33. }
  34. .box button {
  35. width: 80px;
  36. height: 40px;
  37. position: absolute;
  38. top: 50%;
  39. left: 50%;
  40. border: none;
  41. background-color: rgb(61, 196, 230);
  42. transform: translate(-50%);
  43. color: #fff;
  44. border-radius: 10px;
  45. display: none;
  46. }
  47. .box button:hover {
  48. cursor: pointer;
  49. }
  50. </style>
  51. </head>
  52. <body>
  53. <div class="box">
  54. <video src="./homeVideo.mp4" autoplay></video>
  55. <div class="model">
  56. <button>开始播放</button>
  57. </div>
  58. </div>
  59. </body>
  60. <script>
  61. const video = document.querySelector('video')
  62. console.log(video.play());
  63. const model = document.querySelector('.model')
  64. const btn = document.querySelector('button')
  65. // 第一种方法 引导用户去与页面交互实现播放
  66. async function play() {
  67. try {
  68. await video.play();
  69. //使用await的原因是因为video.play()方法返回的是一个Promise,所以在这里我们可以对他进行一些处理
  70. model.style.display = 'none';
  71. btn.removeEventListener('click', play);
  72. // 如果他自动播放了就隐藏按钮,消除点击事件
  73. } catch (err) {
  74. model.style.display = 'block';
  75. btn.addEventListener('click', play);
  76. // 如果Promise返回的是error就引导用户点击按钮,在调用play方法
  77. }
  78. }
  79. play();
  80. //第二种方法比较主流,类似的有网页版抖音以及B站
  81. function play() {
  82. video.muted = true;//设置视频为静音
  83. video.play();//调用播放方法
  84. const ctx = new AudioContext();
  85. const canAutoPlay = ctx.state === 'running'; //通过这个可以判断出视频能不能够自动播放 如何可以它的值就是“running” 否则为"suspended"
  86. // 如果是不能播放我们就执行下面的逻辑,其实就是类似于第一种方法,让用户与其交互
  87. ctx.close();
  88. if (canAutoPlay) {
  89. video.muted = false;
  90. model.style.display = 'none';
  91. btn.removeEventListener('click', play);
  92. }
  93. else {
  94. model.style.display = 'block';
  95. btn.addEventListener('click', play);
  96. }
  97. }
  98. play()
  99. </script>
  100. </html>