python自动播放网页视频_[JavaScript] audio在浏览器中自动播放

2023-11-05

audio 在浏览器中自动播放

autoplay 属性

autoplay 属性规定一旦音频就绪马上开始播放。

如果设置了该属性,音频将自动播放。

使用 autoplay 属性进行播放

//使用autoplay属性

var src = "./award.wav";

var body = document.getElementsByTagName("body")[0];

if (body.getElementsByTagName("audio").length <= 0) {

var audio = document.createElement("audio");

audio.setAttribute("id", "awardAudio");

audio.setAttribute("autoplay", "autoplay");

audio.setAttribute("src", src);

body.appendChild(audio);

setTimeout(function() {

body.removeChild(audio);

}, 2300);

}

oncanplaythrough 事件

oncanplaythrough 事件在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。

在视频/音频(audio/video)加载过程中,事件的触发顺序如下:

onloadstart

ondurationchange

onloadedmetadata

onloadeddata

onprogress

oncanplay

oncanplaythrough

//1

//2

audio.oncanplaythrough=function(){event()};

//3

audio.addEventListener("canplaythrough", event;

监听 canplaythrough 事件进行播放

// 监听加载事件执行play方法

var src = "./award.wav";

var body = document.getElementsByTagName("body")[0];

if (body.getElementsByTagName("audio").length <= 0) {

var audio = document.createElement("audio");

audio.setAttribute("id", "awardAudio");

audio.setAttribute("src", src);

body.appendChild(audio);

//判断音频是否加载完成?

audio.addEventListener(

"canplaythrough",

function() {

audio.play();

setTimeout(function() {

body.removeChild(audio);

}, audio.duration * 1000 + 100);

},

false

);

}

duration 在 autoplay 下回失效,返回 NaN

JS 报错:Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

https://goo.gl/xX8pDD这里是官方给出的解释,chrome66 之后反正是不能用了

解决方法

在 chrome 浏览器中输入 chrome://flags/#autoplay-policy

在 Autoplay policy 下拉中设置无需用户手势

重启 chrome

chrome.exe --disable-features=AutoplayIgnoreWebAudio

MDN->audio 属性

src 歌曲的路径

preload 是否在页面加载后立即加载(设置 autoplay 后无效)

controls 显示 audio 自带的播放控件

loop 音频循环

autoplay 音频加载后自动播放

currentTime 音频当前播放时间

duration 音频总长度

ended 音频是否结束

muted 音频静音为 true

volume 当前音频音量

readyState 音频当前的就绪状态

MDN->audio 事件

abort 当音频/视频的加载已放弃时

canplay 当浏览器可以播放音频/视频时

canplaythrough 当浏览器可在不因缓冲而停顿的情况下进行播放时

durationchange 当音频/视频的时长已更改时

emptied 当目前的播放列表为空时

ended 当目前的播放列表已结束时

error 当在音频/视频加载期间发生错误时

loadeddata 当浏览器已加载音频/视频的当前帧时

loadedmetadata 当浏览器已加载音频/视频的元数据时

loadstart 当浏览器开始查找音频/视频时

pause 当音频/视频已暂停时

play 当音频/视频已开始或不再暂停时

playing 当音频/视频在已因缓冲而暂停或停止后已就绪时

progress 当浏览器正在下载音频/视频时

ratechange 当音频/视频的播放速度已更改时

seeked 当用户已移动/跳跃到音频/视频中的新位置时

seeking 当用户开始移动/跳跃到音频/视频中的新位置时

stalled 当浏览器尝试获取媒体数据,但数据不可用时

suspend 当浏览器刻意不获取媒体数据时

timeupdate 当目前的播放位置已更改时

volumechange 当音量已更改时

waiting 当视频由于需要缓冲下一帧而停止

在react中做成组件

/**

* Created by easterCat on 2017/10/13.

*/

import React from 'react';

import ReactDOM from 'react-dom';

import {connect} from 'react-redux';

import {Icon} from 'antd';

class RecordAudio extends React.Component {

constructor(props) {

super(props);

this.state = {

isPlay: false,

openMuted: false,

volume: 100,

allTime: 0,

currentTime: 0

};

this.millisecondToDate = (time) => {

const second = Math.floor(time % 60);

let minite = Math.floor(time / 60);

return `${minite}:${second >= 10 ? second : `0${second}`}`

};

this.controlAudio = (type, e) => {

const audio = ReactDOM.findDOMNode(this.refs['audio']);

switch (type) {

case 'allTime':

this.setState({

allTime: audio.duration

});

break;

case 'play':

audio.play();

this.setState({

isPlay: true

});

break;

case 'pause':

audio.pause();

this.setState({

isPlay: false

});

break;

case 'changeCurrentTime':

this.setState({

currentTime: e.target.value

});

audio.currentTime = e.target.value;

if (e.target.value === audio.duration) {

this.setState({

isPlay: false

})

}

break;

case 'getCurrentTime':

this.setState({

currentTime: audio.currentTime

});

if (audio.currentTime === audio.duration) {

this.setState({

isPlay: false

})

}

break;

// 是否静音

case 'muted':

audio.muted = !audio.muted;

//为true,则是静音模式

if (audio.muted) {

this.setState({

openMuted: true,

volume: 0

});

} else {

this.setState({

openMuted: false,

volume: 100

});

}

break;

// 调节音量

case 'changeVolume':

/**

* muted=true开启静音模式,muted=false开启声音

* @type {number}

*/

audio.volume = e.target.value / 100;

this.setState({

volume: e.target.value,

});

//如果声音为0,开起静音

if (e.target.value <= 0) {

audio.muted = true;

this.setState({

openMuted: true

})

} else if (e.target.value >= 0) {

audio.muted = false;

this.setState({

openMuted: false

})

}

break

}

}

}

componentDidMount() {

}

render() {

const {src} = this.props;

return (

src={src}

preload={true}

onCanPlay={() => this.controlAudio('allTime')}

onTimeUpdate={(e) => this.controlAudio('getCurrentTime')}

>

音乐播放器

onClick={() => this.controlAudio(this.state.isPlay ? 'pause' : 'play')}

>

{

this.state.isPlay ? :

}

{

this.millisecondToDate(this.state.currentTime) + '/' + this.millisecondToDate(this.state.allTime)

}

className="time"

min="0"

step="0.01"

max={this.state.allTime}

value={this.state.currentTime}

onChange={(e) => this.controlAudio('changeCurrentTime', e)}

/>

onClick={() => this.controlAudio('muted')}

>

{

this.state.openMuted ? :

}

className="volume"

min="0"

step="1"

max="100"

onChange={(e) => this.controlAudio('changeVolume', e)}

value={this.state.openMuted ? 0 : this.state.volume}

/>

)

}

}

const mapStateToProps = (state) => {

return {}

};

const mapActionCreators = {};

export default connect(mapStateToProps, mapActionCreators)(RecordAudio);

在iOS微信浏览器中自动播放HTML5 audio&lpar;音乐&rpar;的2种正确方式

HL AsySocket 服务开发框架 - 一般性测试1

一 概述 Socket服务器性能要好就要经过无数次的测试,来保证,以下是记录一次的测试经过. 机器配置:Inter(R) Core(TM) i3-2310m CPU 2.10GHz RAM 6.00G ...

iOS开发 coreText

coreText的demo下载地址:http://download.csdn.net/detail/shaoting19910730/9254143 NSTextView和Attribued Stri ...

emWin使用外部SRAM的方法

我用的是stm32,加了1MB的外部SRAM,在使用emWin的时候,将一部分内存分配给emWin使用.其实方法很简单,传入SRAM数据总线地址即可,数据位宽我采用16bit,因为使用的SRAM是16 ...

hdoj 1702 ACboy needs your help again&excl;【数组模拟&plus;STL实现】

ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

Programming Concepts

Attributes Attributes provide a powerful method of associating metadata, or declarative information, ...

在 React 中使用 JSX 的好处

优点: 1.允许使用熟悉的语法来定义 HTML 元素树: 2.提供更加语义化且移动的标签: 3.程序结构更容易被直观化: 4.抽象了 React Element 的创建过程: 5.可以随时掌控 HTM ...

修改注册表&period;exe的文件目录

文件打开方式不能选择默认打开文件 cmd >regedit 以sublime_text为例 HKEY_CLASSES_ROOT/Applications/sublime_text.exe/she ...

Python 标准输出 sys&period;stdout 重定向(转)

add by zhj: 其实很少使用sys.stdout,之前django的manage.py命令的源码中使用了sys.stdout和sys.stderr,所以专门查了一下 这两个命令与print的区 ...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python自动播放网页视频_[JavaScript] audio在浏览器中自动播放 的相关文章

  • Windows操作系统TIME_WAIT状态的TCP连接快速回收时间

    问题 大规模Windows环境下 采用Nginx反向代理服务后 操作系统会产生较多TIME WAIT的TCP Transmission Control Protocol 连接 操作系统默认TIME WAIT的TCP连接回收时间是4分钟 TC
  • Qt QtCreator中项目的创建以及确定文件和目录的作用

    本文涉及 使用QtCreator进行第一个QT项目的创建 解析QT项目自动生成的各个文件 项目设计器的使用 查看QT项目文件结构 使用QtCreator配合控制台输出字符 建立QT项目目录 首先按照实际项目中的创建方法准备存放即将创建的案例
  • 批量创建多级文件夹(智能硬件项目文件夹管理为例)

    以智能硬件项目为例 创建项目文件夹 1 新建一个 txt文件 命名为 项目文件夹创建工具 txt 2 文件中输入如下内容 echo echo 项目文件夹创建工具 bat echo 作者 匠在江湖 echo 日期 2020 10 08 ech
  • ubuntu下的qt程序移植至ARM开发板

    一 第一步新建一个helloworld QT工程 二 使用qmake工具生成Makefile文件 在工程源码文件夹运行qmake opt qt 4 7 1 bin qmake 生成Makefile文件 三 执行编译命令 make 如下图所示
  • struts2.1.8+hibernate3.6.0+spring2.5三大框架整合demo

    1 打开myeclipse6 5 新建web工程 SSH 2 导入相关jar包 1 手动导入struts包 Struts2 1 8 最少依赖jar包7个 拷贝到 WEB INF lib目录下 在src目录下建立struts xml文件
  • java如何进阶?

    这篇回答没有长篇大论的 Java 进阶学习路线推荐 作为纯靠自学获得大厂 offer 的过来人 给几点建议 1 一定要动手实践 2 避免货物崇拜编程 3 提高系统设计能力 4 造轮子 5 深入学习 学会总结沉淀 当然也是需要扎实的基础的 例
  • C++标准模板库(STL)介绍与常见STL用法总结

    C 标准模板库 STL 介绍与常见STL用法总结 一 简介 STL是 C 标准模板库 Standard Template Library 的缩写 STL是C 为使用者提供的实现好的容器 包括vector 队列 栈 string等 掌握其对于
  • suse 内核编译安装_教你如何快速编译安装Linux新内核

    随着内核版本的更新换代 你是否有觉得自己的内核版本有些低了呢 如果有的话 没关系 今天小编就来教大家如何编译安装新的内核 在编译安装Linux内核之前先检查我们的虚拟机所在的磁盘空间 预留空间10G以上 不然编译安装内核无法完成 下面我们就
  • 如何优雅的打印数组

    如何优雅的打印数组 以下文章来源于沉默王二 作者沉默王二 https mp weixin qq com s 20s0XSsdUE2qJDP4OtM rw 在 Java 中 数组虽然是一个对象 但并未明确的定义这样一个类 因此也就没有覆盖 t
  • Linux在应用层读写寄存器的方法及/dev/mem分析

    1 Linux在应用层读写寄存器的方法 转自 https blog csdn net liukang325 article details 26601811 可以通过操作 dev mem设备文件 以及mmap函数 将寄存器的地址映射到用户空
  • Go-OpenWrt获取wan口ip、dns、网关ip

    Go OpenWrt获取wan口ip dns 网关ip 文章目录 Go OpenWrt获取wan口ip dns 网关ip 1 前言 2 解决方案思路 3 代码 1 前言 一般来说 Openwrt可以配置多个wan口和多个lan口 这里获取的
  • Vue父子组件通过prop异步传输数据踩坑

    今天碰到vue开发父子组件通信的一个小坑 情况是这样的 子组件使用echart展示图表 所需options由父组件通过prop传入 父组件中的options初始值为空 在mounted钩子函数中发起http请求获取数据然后更新options
  • Qt制作简单的无边框登陆窗口

    使用qt做简单的登录窗口 环境 win10 Qt5 创建项目 选择Widget类 勾选ui界面 因为我是用的默认类名所以类名是Widget 以下是Widget h ifndef WIDGET H define WIDGET H includ
  • 离散方法介绍

    离散成 的方法存在很多 但是各个方法直接存在优劣 从两方面进行参数比较 方面 1 从零点和极点 2 环节的频率响应 幅频和相频特性 系统控制方面 评价离散方法的参数 1 主导零 极点 2 系统带宽或者穿越频率 3 直流增益 4 增益裕度 5
  • Python采集世界大学排行榜,做数据可视化,来看看你的大学上榜没

    前言 这不是最近疫情又开始了 马上也要过年了 就是说很多大学都开始准备放假了吧 我有个表妹下周二就放寒假了哈哈 感觉现在读书寒假可长了 今天有点无聊 就来 爬取一下世界大学排行榜 做数据可视化 看看你们的学校上榜没 知识点 动态数据抓包 r
  • Algorithm oj 全集(已过oj)

    Algorithm oj 分治策略 作业1 找出数组中第 k 小的数 总提交数 616次 通过数 188次 通过率 30 52 内存限制 104857600 BYTE 时间限制 10000 MS 输入限制 1000 行 输出限制 1000
  • 【我的面试-01】Web前端开发实习岗-面试题总结

    简单开头 首先技术面试官会根据简历里所写的项目和个人掌握技术栈提问 我不知道已经改过多少次简历了 因为前期投简历是真的是沉在茫茫大海 捞漂流瓶都捞不到的那种 我的技术栈 Vue还在苦苦的自学当中 随便推荐一下coderwhy老师B站的教学视
  • 通过反射获取一个对象的属性值三种方法比较

    这里写目录标题 为何要写这篇博客 数据准备 方法实践 总结 为何要写这篇博客 反射机制的用途非常多 比如获取方法 属性名和属性值等 甚至可以获取标签等标签属性 今天来比较几种获取实例化对象的属性值方法 数据准备 Builder FieldD
  • C++的cout高阶格式化操作

    敬告 当您的浏览器以非默认字体浏览本文时 段落格式可能会出现偏差 这篇文章主要讲解如何在C 中使用cout进行高级的格式化输出操作 包括数字的各种计数法 精度 输出 左或右对齐 大小写等等 通过本文 您可以完全脱离scanf printf

随机推荐

  • 攻防世界-WEB新手练习区教程(二)

    目录 攻防世界 WEB新手练习区教程 二 simple js xff referer weak auth command execution simple php 攻防世界 WEB新手练习区教程 二 simple js 进入场景 需要输入密
  • 记忆化搜索 Memorization Search

    记忆化搜索 Memorization Search 什么是记忆化搜索 记忆化搜索函数的三个特点 记忆化搜索 vs 动态规划 三种适用于DP的场景 三种不适用于DP的场景 Examples Leetcode 140 单词拆分 II Leetc
  • print.js 打印的网页单页内容,多出第二页空白页面

    问题如上图 解决过程 给table外嵌套的div设置了样式page break after也没有效果 最后索性给打印区域添加加边框 准备看看预览时空白页里有什么 结果后一页的空白页就这么没了 o 观察发现 加上边框后 table的宽度确实有
  • 【js】用正则实现一串数字用逗号隔开千分位

    此方法适用于正整数 负整数 浮点数 const formatNumberWithCommas number any gt 兼容一下传进来的number字段有可能是null undefined NaN 0的情况 当number为null un
  • .NET基础概念解释及主要体系结构

    一 NET概念详解 1 NET NET就是微软用来实现XML Web Services SOA 面向服务的体系结构service orientedarchitecture 和敏捷性的技术 NET是微软的新一代技术平台 为敏捷商务构建互联互通
  • python无web框架接口通信

    1 发送 def image to base64 image np image cv2 imencode jpg image np 1 tobytes base64 data base64 b64encode image base64 da
  • Java解析txt文件

    Java解析txt文件 package com wb test import java io BufferedReader import java io File import java io FileInputStream import
  • mysql和c#在类型转换的问题

    1 char 36 和string mysql在将char 36 类型的会转成System GUID 如果char 36 字段里存的不是guid 最好不要用char 36 改成char 37 这样的就没事了 在 net开放中 asp net
  • 李晓波

    一 大败局 第一部 这套书 真的写出来改革开放以来 中国比较出名的企业的生存与失败 这套书可以指导我十年吧 这几本书应该每两年翻阅一遍 1 秦池酒的成功与失败 中国标王 广告对普通人的影响 公关 品牌营销 2013 11 20 二 中国经济
  • cygwin环境编译 致命错误:stddef.h:can not found

    最近需要在linux下运行代码 为了省去搭建环境的时间 就使用了cygwin这一工具 但它在编译过程中 出现了can not found stddef h的问题 原因是库文件sttdef h没有找到 上网查了一下 有的博客写到需要对g 降级
  • 使用MongoDB命令连接远程服务器的MongoDB数据库

    使用MongoDB命令连接远程服务器的MongoDB数据库 MongoDB连接远程服务器的命令格式如下 mongo 远程主机ip或DNS MongoDB端口号 数据库名 u user p password MongoDB连接远程服务器的命令
  • LeetCode 每日一题 2023/9/11-2023/9/17

    记录了初步解题思路 以及本地实现代码 并不一定为最优 也希望大家能一起探讨 一起进步 目录 9 11 630 课程表 III 9 12 1462 课程表 IV 9 13 2596 检查骑士巡视方案 9 14 1222 可以攻击国王的皇后 9
  • AcWing167. 木棒(DFS+剪枝)

    输入样例 9 5 2 1 5 2 1 5 2 1 4 1 2 3 4 0 输出样例 6 5 解析 DFS 搜索顺序 根据木棒的长度从小到大枚举每根木棒 对于每根木棒 枚举可以由哪些木棍拼成 如果所有的木棍拼成了长度相等的多个木棒 说明找到了
  • PGSQL(学习与操作)

    PGSQL操作手册 1 Navicat连接数据库 192 168 31 0 密码 123456 port 5432 2 PGSQL数据库基础学习 1 创建数据库 CREATE DATABASE runoobdb 创建数据库 数据库名为run
  • ubuntu 18 OpenCV 4.5.3 cuda 源码编译

    目录 opencv453 build build sh opencv 4 5 3 opencv contrib 4 5 3 编译命令 创建 build sh 文件 pwd cmake D CMAKE BUILD TYPE RELEASE D
  • 基于蚁群算法求解运钞车路径规划问题(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 车辆路径规划问题 Vehicle Rout
  • 【factoryio】虚拟工厂 的安装和使用

    文章目录 目录 文章目录 前言 一 factoryio是什么 二 factoryio的安装和使用 1 安装 2 激活 3 使用 三 factoryio和西门子PLC进行仿真连接 1 在博途软件中打开工程模板 2 进行仿真连接 3 点动实例
  • 机器学习笔记4-Tensorflow线性模型示例及TensorBoard的使用

    前言 在上一篇中 我简单介绍了一下Tensorflow以及在本机及阿里云的PAI平台上跑通第一个示例的步骤 在本篇中我将稍微讲解一下几个基本概念以及Tensorflow的基础语法 本文代码都是基于API版本r1 4 本文中本地开发环境为Py
  • ubuntu 安装软件idea

    sudo dpkg i sogoupinyin 2 0 0 0072 amd64 deb 把Idea放到你想要方的位置 sudo cp ideaIU 2018 1 6 tar gz usr local 解压 sudo tar zxvf id
  • python自动播放网页视频_[JavaScript] audio在浏览器中自动播放

    audio 在浏览器中自动播放 autoplay 属性 autoplay 属性规定一旦音频就绪马上开始播放 如果设置了该属性 音频将自动播放 使用 autoplay 属性进行播放 使用autoplay属性 var src award wav