video实现浏览器打开自动播放_web_cgh的博客-程序员秘密

技术标签: Javascript  video  

1.html

  <video id="minione-video" class="minione-video" poster="./common/images/mini-one/miniONE_BG2.jpg" autoplay="autoplay" muted="muted" preload>
        <source type="video/mp4" src="http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4">
        <!--<source type="video/mp4" src="./common/images/mini-one/mini-one-video.mp4">-->
        <!--<source type="video/mp4" src="./common/images/mini-one/mini-one-video.Ogg">-->
        <img src="./common/images/mini-one/BG2.jpg" alt="one">

      </video>

2.demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Fake auto play html audio in iOS Safari the right way</title>
    <style>
        video{
            width: 100%;
        }
    </style>
</head>
<body>
<video id="bgmusic" autoplay preload muted>
    <source type="video/mp4" src="http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4">
</video>
<script>
    (function() {
        function log(info) {
            console.log(info);
            // alert(info);
        }
        function forceSafariPlayAudio() {
            audioEl.load(); // iOS 9   还需要额外的 load 一下, 否则直接 play 无效
            audioEl.play(); // iOS 7/8 仅需要 play 一下
        }


        var audioEl = document.getElementById('bgmusic');


        // 可以自动播放时正确的事件顺序是
        // loadstart
        // loadedmetadata
        // loadeddata
        // canplay
        // play
        // playing
        // 
        // 不能自动播放时触发的事件是
        // iPhone5  iOS 7.0.6 loadstart
        // iPhone6s iOS 9.1   loadstart -> loadedmetadata -> loadeddata -> canplay
        // audioEl.addEventListener('loadstart', function() {
        //     log('loadstart');
        // }, false);
        // audioEl.addEventListener('loadeddata', function() {
        //     log('loadeddata');
        // }, false);
        // audioEl.addEventListener('loadedmetadata', function() {
        //     log('loadedmetadata');
        // }, false);
        // audioEl.addEventListener('canplay', function() {
        //     log('canplay');
        // }, false);
        // audioEl.addEventListener('play', function() {
        //     log('play');
        //     // 当 audio 能够播放后, 移除这个事件
        //     window.removeEventListener('touchstart', forceSafariPlayAudio, false);
        // }, false);
        // audioEl.addEventListener('playing', function() {
        //     log('playing');
        // }, false);
        // audioEl.addEventListener('pause', function() {
        //     log('pause');
        // }, false);


        // 由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio,
        // 因此我们通过一个用户交互事件来主动 play 一下 audio.
        window.addEventListener('ready', forceSafariPlayAudio, false);
        // audioEl.src = 'http://c1.mifile.cn/f/i/16/chain/airpro/airpro-top.mp4';
    })();
</script>
</body>
</html>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/web_cgh/article/details/81015537

智能推荐

python 7 -- 彩蛋:python头文件 -- 特殊的注释行(#!/usr/bin/env python和# -*- coding: utf-8 -*-)_Lapland Stark的博客-程序员秘密

#!/usr/bin/env python是用来说明脚本语言是 python 的是要用 /usr/bin下面的程序(工具)python,这个解释器,来解释 python 脚本,来运行 python 脚本的但是,事实上可以用预先配置来解决这个问题...

如何在Altium Designer中实现两片DDR等长走线_a16839678的博客-程序员秘密

如图所示,以ARM,DSP等SOC为核心的电子系统中,经常存在两片或者以上的DDR/DDRII SDRAM。考虑到DDR/DDRII SDRAM的运行频率一般都比较高,在做PCB layout的时候需要等长布线来保证DDR/DDRII SDRAM的读写时序。对于包含两片及以上DDR/DDRII SDRAM的系统,这里要求的等长布线有两层含义。拿ADDRESS信号来讲,第一层含义要求从SOC的某一个

[转]Android-x86 4.4 RC1 发布_weixin_34162401的博客-程序员秘密

转自开源中国http://www.oschina.net/news/48904/android-x86-4-4-rc1?from=20140216#comments Android-x86 4.4 RC1 发布了,下载地址:android-x86-4.4-RC1.iso (294MB).该版本基于 Android 4.4.2,发行说明:http://www.android-x...

K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472..._weixin_30649641的博客-程序员秘密

1. 获取资料 网址:https://blog.csdn.net/xts_huangxin/article/details/51494472 感谢原作者 这里面 按照自己的机器情况进行了学习模仿 并且mark一下.2. 下载yaml 文件:https://github.com/FlyingShit-XinHuang/my-doc/blob/master/k8s/pv%26pvc/n...

WEB版一次选择多个文件进行批量上传(swfupload)的解决方案_页面选择多文件同时上场_kkwant的博客-程序员秘密

说明:功能完全支持ie和firefox浏览器! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如

读《马云创造:颠覆传统的草根创业者传奇》永不消逝的激情!_raying的博客-程序员秘密

       “ 也许人们都看到了马云的成功,但并不一定都知道他们是怎么成功的,他的成功又给我们多少启示。因为在马云创业的7年中,人们看到的马云都是隐藏在马云制造的媒体背影中的:人们仅仅看到的是一个说大话的马云、一个会忽悠人的马云,而没有真正认识马云的商业智慧。 ”        马云在互联网中的商业智慧就如同浙江那些传统的生意人一般,你永远琢磨不透,却对你充满着吸引力,即使你非常非常不喜欢他

随便推点

解决 TCP_socket 粘包问题_agurt80004的博客-程序员秘密

所谓粘包问题主要还是C/S两端数据传输时 因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的根本原因:粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。解决方法:1、自定义字典类型 的...

Vue项目中svg图标不能正常显示_aei600024的博客-程序员秘密

1.安装 svg-sprite-loadernpm install svg-sprite-loader --save-dev2.配置build文件夹中的webpack.base.conf.js3.在src/components下新建文件夹及文件SvgIcon/index.vue4.在src下新建icons文件夹,及icons文件夹下svg文件夹、index.j...

带滚动条的文本框_守护大白菜的博客-程序员秘密

div style="width: 330px; height: 50px; overflow: scroll;overflow-x: hidden;scrollbar-track-color: #95A6AA;scrollbar-darkshadow-color: #85989C;"> 文本文本文本文本div>属性解释:overflow: scroll;超出部分滚动条默认左右

《unix环境高级编程》 读书笔记 (6)_unix环境高级编程读书笔记_alex_my的博客-程序员秘密

1 exit, _exit, _Exit and atexit在解释前三个之前先说说这个:#include int atexit(void (*function)(void));atexit: 注册终止函数,即结束的时候由exit调用所注册的那些函数。ISO C规定,至少可以注册32个函数。exit调用这些注册函数的顺序与它们登记时候的顺序相

Linux - 多线程API编程_linux多线程编程api_艾-小小雨的博客-程序员秘密

pthread_mutexattr_init 函数功能 :初始化互斥锁属性对象 函数头文件 :#include

基于Atmega16的外部中断实验_mcucr atmega16_DongLe.的博客-程序员秘密

一、实验目的1. 理解单片机中断的概念。2. 掌握外部中断的编程方法。二、实验内容1. 验证课堂例题编译下载运行课堂例题——“按键次数显示”(INT_EX1)和“按键次数显示清零”(INT_EX2),查看运行结果。理解程序的编程思想和程序执行过程。2. 设计程序参考上述例题的电路和编程思路,自行设计电路,包括三个按键K1、K2和K3,分别连接外部中断INT0-INT2,6位数码管显示,1个LED报警灯;编程实现K1按键次数的显示,显示数据清零和次数越限报警等功能。具体要求