| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <!--
- Chrome 浏览器的视频自动播放策略
- 1.始终允许静音模式下自动播放
- 2.在以下的情况中,带声音播放会被允许:
- ①用户已经与当前的域进行了交互(也就是click,tap事件)。
- ②在桌面设备上,用户的媒体参与度指数阈值已经超过,这意味着用户之前播放过有声视频。
- ③用户已经将网站添加到移动设备上的主屏幕或允在桌面上安装了PWA。
- 3.顶部帧可以将自动播放权限委派给其iframe,来允许自动播放声音
-
- 媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。
- 可以通过:chrome://media-engagement/ 查看
- -->
- <style>
- * {
- margin: 0;
- padding: 0;
- }
-
- body {
- display: flex;
- justify-content: center;
- }
-
- video {
- width: 800px;
- height: 600px;
- }
-
- .box {
- position: relative;
- }
-
- .box button {
- width: 80px;
- height: 40px;
- position: absolute;
- top: 50%;
- left: 50%;
- border: none;
- background-color: rgb(61, 196, 230);
- transform: translate(-50%);
- color: #fff;
- border-radius: 10px;
- display: none;
- }
-
- .box button:hover {
- cursor: pointer;
- }
- </style>
-
- </head>
-
- <body>
- <div class="box">
- <video src="./homeVideo.mp4" autoplay></video>
- <div class="model">
- <button>开始播放</button>
- </div>
- </div>
- </body>
- <script>
- const video = document.querySelector('video')
- console.log(video.play());
-
- const model = document.querySelector('.model')
- const btn = document.querySelector('button')
- // 第一种方法 引导用户去与页面交互实现播放
- async function play() {
- try {
- await video.play();
- //使用await的原因是因为video.play()方法返回的是一个Promise,所以在这里我们可以对他进行一些处理
- model.style.display = 'none';
- btn.removeEventListener('click', play);
- // 如果他自动播放了就隐藏按钮,消除点击事件
- } catch (err) {
- model.style.display = 'block';
- btn.addEventListener('click', play);
- // 如果Promise返回的是error就引导用户点击按钮,在调用play方法
- }
- }
- play();
-
- //第二种方法比较主流,类似的有网页版抖音以及B站
- function play() {
- video.muted = true;//设置视频为静音
- video.play();//调用播放方法
- const ctx = new AudioContext();
- const canAutoPlay = ctx.state === 'running'; //通过这个可以判断出视频能不能够自动播放 如何可以它的值就是“running” 否则为"suspended"
- // 如果是不能播放我们就执行下面的逻辑,其实就是类似于第一种方法,让用户与其交互
- ctx.close();
- if (canAutoPlay) {
- video.muted = false;
- model.style.display = 'none';
- btn.removeEventListener('click', play);
- }
- else {
- model.style.display = 'block';
- btn.addEventListener('click', play);
- }
- }
- play()
- </script>
-
- </html>
|