H5页面多个视频如何只同时播放一个?

server/2024/11/18 11:14:57/

目录

      • 背景
        • 1. 首先介绍下 muted 属性
        • 2. 监听播放和暂停操作
        • 3. 视频播放完毕后返回桌面,再进入H5页面发现视频封面丢失置灰
          • 解决思路:

背景

页面模块同时有个四个视频模块,发现可以同时播放四个视频,但是理想的是每次只播放一个。
在这里插入图片描述

旧代码:

<div class="list-item" v-for="item of VIDEO_TYPES" :key="item.title"><videoref="videosRef"class="video"playsinlinemutedwebkit-playsinlinepreload="auto"x5-video-player-type="h5-page"controls:poster="item.poster":src="item.video"></video></div>
1. 首先介绍下 muted 属性

一个布尔属性,指明在视频中音频的默认设置。设置后,音频会初始化为静音。默认值是 false, 意味着视频播放的时候音频也会播放。

视频静音的情况下,IOS 可以同时播放多个,所以把这个属性去掉,IOS 每次就只能播放一个了,但是 Android 比较特殊,即使去到这个属性也还是可以同时播放多个视频。

2. 监听播放和暂停操作

在每次点击播放的时候,先停止所有视频,然后在播放正在点击的视频。

 <div class="list-item" v-for="item of VIDEO_TYPES" :key="item.title"><videoref="videosRef"class="video"playsinlinewebkit-playsinlinepreload="auto"x5-video-player-type="h5-page"controls:poster="item.poster":src="item.video"@play="onPlay(item.video)"@pause="onPause(item.video)"></video><div class="title">{{ item.title }}</div></div>const activeVideoId = ref('');const onPlay = (videoId) => {if (isIOS) return; // IOS不需要处理,不然会有点击的卡顿感// 如果已有视频在播放,暂停它if (activeVideoId.value && activeVideoId.value !== videoId) {const activeVideo = videosRef.value.find((video) => {return video.src === activeVideoId.value;});if (activeVideo) {activeVideo.pause();}}activeVideoId.value = videoId; // 设置当前播放的视频
};
// 视频暂停时触发
const onPause = (videoId) => {if (isIOS) return;if (activeVideoId.value === videoId) {activeVideoId.value = null; // 清除当前播放的视频 ID}
};

在这里插入图片描述

3. 视频播放完毕后返回桌面,再进入H5页面发现视频封面丢失置灰

在这里插入图片描述
可能原因:
当你退出视频播放页面(例如最小化到桌面),浏览器可能会暂停页面的 JavaScript 执行或丢失某些页面状态。导致重新进入页面时,视频封面未被正确恢复。

解决思路:

确保封面重新加载:

在页面重新进入时,强制重新加载封面图像。你可以通过监听 visibilitychange 事件或使用 onfocus 事件来确保封面图像的状态恢复。

const refreshVideo = () => {const videos = document.querySelectorAll('video');// 遍历每个 video 元素videos.forEach((video) => {const src = video.getAttribute('src');const wasPlaying = !video.paused;video.setAttribute('src', '');video.setAttribute('src', src);if (wasPlaying) {video.play();} else {// 重新加载视频video.load();}});
};onMounted(() => {document.addEventListener('visibilitychange', refreshVideo);});
onBeforeMount(() => {document.removeEventListener('visibilitychange', refreshVideo);
});

http://www.ppmy.cn/server/142892.html

相关文章

vue学习第十章(组件开发)

&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x1f64f; 文章目录…

2024下半年自学黑客(网络安全)

CSDN大礼包&#xff1a;&#x1f449; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&…

在Google Cloud Platform (GCP) 中用Pub/Sub+Dataflow+BigQuery构建数据处理仓库

在 Google Cloud Platform (GCP) 中&#xff0c;Pub/Sub、Dataflow 和 BigQuery 是构建数据处理和分析管道的强大工具。以下是它们的架构搭配及详细实现攻略。 架构概述 Pub/Sub&#xff1a;作为消息队列&#xff0c;Pub/Sub 用于接收和传输实时数据流。它能够处理高吞吐量的消…

AWTK-WIDGET-WEB-VIEW 实现笔记 (1) - 难点

webview 提供了一个跨平台的 webview 库&#xff0c;其接口简单&#xff0c;提供的例子也直观易懂。但是把它集成到 AWTK 里&#xff0c;还是遇到一些难题&#xff0c;这里记录一下&#xff0c;供有需要的朋友参考。 1. 作为 AWTK 控件 webview 提供的例子都是独立的程序&…

数据处理与统计分析——04-Pandas中Series的常用方法、属性、布尔索引、运算操作

Series 概述 Series也是Pandas中的最基本的数据结构对象&#xff0c;也是DataFrame的列对象或者行对象&#xff0c;series本身也具有行索引。Series是一种类似于一维数组的对象&#xff0c;由下面两个部分组成&#xff1a; values&#xff1a;一组数据&#xff08;numpy.ndar…

Http常⻅见请求/响应头content-type内容类型讲解(笔记)

常见的 Content-Type 媒体类型 text类型&#xff1a; text/html&#xff1a;HTML格式&#xff0c;常用于网页内容。text/plain&#xff1a;纯文本格式&#xff0c;未进行任何格式化。text/xml&#xff1a;XML格式&#xff0c;表示以 XML 格式传输的数据。 image类型&#xff08…

【Nginx】反向代理Https时相关参数:

在Nginx代理后台HTTPS服务时&#xff0c;有几个关键的参数需要配置&#xff0c;以确保代理服务器能够正确地与后端服务器进行通信。一些重要参数的介绍&#xff1a; proxy_ssl_server_name&#xff1a;这个参数用于指定是否在TLS握手时通过SNI&#xff08;Server Name Indicati…

Docker基础概念

Docker基础概念 文章目录 Docker基础概念前言一、docker结构二、容器的概念 前言 为什么要学习docker?docker是现在主流流行的容器化部署服务的技术栈之一。过去传统部署服务器的时候有这些缺点 1.各种中间件&#xff0c;数据库等部署麻烦&#xff0c;版本控制难度大 2.一个服…