解决浏览器播放音频声音,没交互前不播放问题

server/2025/2/7 2:58:55/

方法一:通过显示“需要播放音频”弹窗,进行交互之后播放。

javascript"> <audio ref="audioRef"><source src="./mp3/tishi.mp3" /></audio><script setup>import { ref } from 'vue'let audioRef = ref(null)onMounted(() => {if (window.performance.navigation.type === 1) {//重新加载audioClick()} else {handelShow()}})const audioClick = () => {let startPlayPromise = audioRef.value.play()if (startPlayPromise !== undefined) {startPlayPromise.catch(error => {if (error.name === 'NotAllowedError') {// 弹窗引导用户与页面做交互,只需要一个简单的按钮即可// 记得在按钮上绑定一个带有play()方法的回调函数,以element-plus的组件为例ElMessageBox.alert('当前正在自动播放音频', '提示', {confirmButtonText: '确认',callback: () => {audioRef.value.play()},})}})}}const handelShow = () => {audioRef.value.play()}
</script>

方法二:通过监听页面点击事件,页面有交互之后播放。

javascript"> data() {return {initIntervalPlay:null,firstPlayVid: true,}},mounted() {const audio =document.getElementById("videoSound");let startPlayPromise = audio.play();if (startPlayPromise !== undefined) {//判断 首次进入用户没交互时,无法播放问题startPlayPromise.catch((error) => {document.removeEventListener('click', this.playHandle)document.addEventListener('click', this.playHandle)}).then(() => {this.intervalPlay()});}
}playHandle() {if (this.firstPlayVid) {document.getElementById("videoSound").play()this.intervalPlay()this.firstPlayVid = false}},//循环播报提示音intervalPlay(){if (this.initIntervalPlay) {window.clearInterval(this.initIntervalPlay)}this.initIntervalPlay = setInterval(() => {document.getElementById("videoSound").play()}, 5000)}

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

相关文章

【数据结构-字典树】力扣211. 添加与搜索单词 - 数据结构设计

请你设计一个数据结构&#xff0c;支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 实现词典类 WordDictionary &#xff1a; WordDictionary() 初始化词典对象 void addWord(word) 将 word 添加到数据结构中&#xff0c;之后可以对它进行匹配 bool search(…

深度学习中,文本分类任务怎么做

一、处理流程 前置步骤&#xff1a; 标注数据得到数据集数据清理&#xff1a;将特殊字符、特殊格式、无效字符去除 正式步骤&#xff1a; 1、分词或分字&#xff1a;英文一般都分词&#xff0c;中文有分词也有分字。分词还是分字取决于你模型的embedding。 2、将字或词编辑ID…

深度学习 | 表示学习 | 卷积神经网络 | Batch Normalization 在 CNN 中的示例 | 20

如是我闻&#xff1a; 让我们来用一个具体的例子说明 Batch Normalization 在 CNN 里的计算过程&#xff0c;特别是如何对每个通道&#xff08;channel&#xff09;进行归一化。 1. 假设我们有一个 CNN 层的输出 假设某个 CNN 层的输出是一个 4D 张量&#xff0c;形状为&#…

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中&#xff0c;异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括&#xff1a; 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…

Selenium 浏览器操作与使用技巧——详细解析(Java版)

目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具&#xff0c;能够…

SpringBoot使用 easy-captcha 实现验证码登录功能

文章目录 一、 环境准备1. 解决思路2. 接口文档3. redis下载 二、后端实现1. 引入依赖2. 添加配置3. 后端代码实现4. 前端代码实现 在前后端分离的项目中&#xff0c;登录功能是必不可少的。为了提高安全性&#xff0c;通常会加入验证码验证。 easy-captcha 是一个简单易用的验…

Java小白入门教程:LinkedList

目录 一、定义 二、作用 1、存储数据 2、动态扩容 3、提供方便的操作方法 三、使用场景 1.当你需要频繁地在列表的开头或结尾添加或删除元素时。 2.当你不需要按索引快速访问元素时&#xff0c;因为LinkedList访问元素需要从头开始遍历 3.当你不需要线程安全的数据结构…

Flink2支持提交StreamGraph到Flink集群

最近研究Flink源码的时候&#xff0c;发现Flink已经支持提交StreamGraph到集群了&#xff0c;替换掉了原来的提交JobGraph。 新增ExecutionPlan接口&#xff0c;将JobGraph和StreamGraph作为实现。 Flink集群Dispatcher也进行了修改&#xff0c;从JobGraph改成了接口Executio…