今天做了一个简单的落地页项目,就是类似于手机微信上经常看到的滑动效果。因为公司要求需要自己开发,所以我就用swiper+swiper.animate开发,开发速度很快,只不过最后音乐哪里出现了一点小bug在ios手机上不能自动播放。本着互联网分享精神我将分享给大家怎么解决这个bug。

思路讲解

  因为右上角的音乐图标需要转动,同时音乐播放。我的设计思路是当音乐加载完成后,音乐播放,图标转动(图标默认是不转动的),要不然有些用户网速慢造成音乐加载不完,图标却先转动了,这样也不符合逻辑。图标的转动和不转动切换时使用切换class实现的。这里我就不做过多的讲解了。

Html源码

    <audio id="narrate" src="music/1.mp3" loop="loop" preload="preload"></audio>

js源码

    var music = document.getElementById('music');
var mnarrate = document.getElementById('narrate');
mnarrate.oncanplay = function () { //音乐加载完成执行的函数
music.className = 'start-music';//图标开始旋转
mnarrate.play(); //音乐开始播放
};

  但是上列代码有个弊端,我在浏览器上测试的好好的,安卓也没什么事情。但是到ios上音乐不能播放只能点击下之后才能播放。由于iOS的安全机制问题。不允许audio和video自动播放,即使给play()也是播放过不了。

解决方案1

  使用微信sdk

  js源码

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    function autoPlay(id) {
var audio = document.getElementById(id);
$('#narrate').addClass('start-music');
audio.play();
document.addEventListener("WeixinJSBridgeReady", function () {
audio.play();
}, false);
document.addEventListener('YixinJSBridgeReady', function () {
audio.play();
}, false);
}
autoPlay('narrate');

   注意调用以上方法需要配置wn.config如果不配置调用不了,并且以上代码只有在微信访问的时候才生效,其他环境不生效。

   以上方法可能有些复杂,所以还有一个折中的办法。因为是落地页么。所以用户很有坑能滑动或者点击了屏幕,我们可以利用这一点来实现音乐自动播放。

  js代码如下

    var music = document.getElementById('music');
var mnarrate = document.getElementById('narrate');
var html = document.getElementsByTagName('html')[0];
var oneClick = true; //指允许点击一次变量。
mnarrate.oncanplay = function () { //非ios执行函数
music.className = 'start-music';
mnarrate.play();
};
html.addEventListener('touchstart', function () {//ios执行函数。可与上非los同时使用两者不冲突。
if (oneClick === false) {
return
}
oneClick = false;
music.className = 'start-music';
mnarrate.play();
}, false);

  以上代码是给html加一个触碰事件,一旦触碰音频开始播放,这一点ios是允许的。因为项目比较小我用原生写的,如果用jQuery的话有一个one方法,这个方法是指执行一次。

  后记:互联网世界之大,高手如云,本着虚心学习的半杯水精神,如果哪位大神有更好的方案可以给我留言。我会及时回复。

  

ios audio不能自动播放的更多相关文章

  1. 100%解决ios上audio不能自动播放的问题

    由于ios的安全机制问题,不允许audio和video自动播放,所以想要使audio标签自动播放那是实现不了的,即使给play()也是播放不了. 解决方法: 首先,创建audio标签:<audi ...

  2. ios html5 audio 不能自动播放

    //修复ios 浏览器不能自动播放音频的问题 在加载时创建新的audio 用的时候更换src即可 Xut.fix = Xut.fix||{}; if (Xut.plat.isBrowser & ...

  3. 微信h5页面audio标签在ios下不能自动播放

    背景介绍:在一个h5页面中,当用户提交表单到后台,后台返回的结果成功的话,开始自动播放背景音乐 出现的问题:在安卓手机上正常,iOS中没有反应 后来网上一番搜索后了解到时因为iOS不允许自动播放音乐, ...

  4. 微信的audio无法自动播放的问题

    一.问题 最近做了一个html5的项目,里面涉及到音乐播放,项目要求音乐进入页面就自动播放,于是我就想到了html5的audio标签,将mp3引入进去. 1.在audio标签里引入了autoplay属 ...

  5. 摇一摇—微信7.0.8版本audio无法自动播放问题

    近日有一个项目出现audio无法自动播放,查看原因才发现是微信版本更新为7.0.8版本,需要有交互行为,第一次播放需要用户手动点击一下,无法使用DOM中的play()进行直接播放操作,那怎么办呢? 通 ...

  6. html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)

    // html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...

  7. iOS背景音乐不自动播放

    iOS 内置浏览器safari不允许自动播放音乐.我们需要通过WeixinJSBridgeReady()函数实现自动触发 document.addEventListener("WeixinJ ...

  8. 微信video和audio无法自动播放解决方案

    //音频,写法一<audio src="music/bg.mp3" autoplay loop controls>你的浏览器还不支持哦</audio> // ...

  9. audio微信自动播放以及自定义样式

    audio标签如下: <audio id="audioTag" src="" autoplay="autoplay" controls ...

随机推荐

  1. 三个数组求中位数,以及中位数的中位数----java算法实现

    求三个数组的中位数,以及中位数的中位数.   import java.util.Arrays; public class median { public static void main(String ...

  2. MySQL MGR实现分析 - 成员管理与故障恢复实现

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MySQL Group Replication(MGR)框架让MySQL具备了自动主从切换和故障恢复能力,举 ...

  3. CF|codeforces 280C Game on Tree

    题目链接:戳我 大概题意:给一棵树,然后每次可以删除一个子树,问你期望多少次能把整棵树都删完? 概率和期望是个神仙..我不会 对于这个题,我们要有一个前置知识--期望的线性性,就是说总期望的值等于各个 ...

  4. 爬虫开发9.scrapy框架之递归解析和post请求

    今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久 ...

  5. Oracle ocp 12c-071最新考试题库及答案-1

    choose the best answer: View the Exhibit and examine the structure of the CUSTOMERS table. CUSTOMER_ ...

  6. VUE随笔-20181020

    常用的一些指令 -------------------------------------------------------------------------------------------- ...

  7. 多继承c3算法

    一.mro mro即 method resolution order (方法解释顺序),主要用于在多继承时判断属性的路径(来自于哪个类). print(类.mro)得到属性路径按继承顺序 在pytho ...

  8. php中数组模拟队列、栈的函数以及数组指针操作

    1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...

  9. [ActionSprit 3.0] FMS客户端与服务器端交互(传参)

    客户端as: import flash.net.NetConnection; import flash.events.NetStatusEvent; var nc:NetConnection = ne ...

  10. 【spring】Spring Boot:定制自己的starter

    概念 在学习Spring Boot的过程中,接触最多的就是starter.可以认为starter是一种服务——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring ...