html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)
// html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过。。###重点参考js代码###
<div>
<div class="weui-cells weui-cells_form">
<div class="weui-cell weui-cell_switch">
<div class="weui-cell__bd">语音播报</div>
<div class="weui-cell__ft">
<input class="weui-switch" type="checkbox" id="set_voice" @if($voice) checked="checked" @endif/>
</div>
</div>
</div>
{{--语音播放标签--}}
<div>
{{--http://storetest.beikelin.com/wechat/order/0.mp3 // 开场白必须保证0.mp3为有效语音 防止后面调用音频对象播放时 $audio.play() 报错--$audio对象请参考下面的js代码}}
<audio src="/wechat/order/0.mp3" id="audio"></audio>
</div>
</div> {{--引入微信内置jsapi 方便在ios 微信端处理 音频自动播放的问题-此项必不可少的--}}
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
document.addEventListener('visibilitychange', function() {
// 监听网页是否进行唤起活动页面的操作 释义:用户进行息屏和灭屏或者切换到了其他应用后重新回到了当前页面
if(!document.hidden) // 如果用户重新回到了当前页面,马上执行刷新当前网页
{
window.location.reload(); // 刷新
}
}); var $request_init; // 接收setTimeout() 返回的 ID 值
var $audio = document.getElementById("audio"); // 音频播放对象标签
var $order_id = 0; // 初始化订单id
$.ajaxSettings.async = false; // 禁止异步请求必须为同步请求,防止ios微信端不能进行自动播放和修改某些js全局变量不生效的问题 var initOrderId = function () { // 自己封装的请求订单id的方法,在这里的演示意义并不大,你可以忽悠不看
$.ajax({
url: "{{url('/wechat/order/voice')}}",
async: false,
data: {},
type: "GET", //请求方式
success: function($data) {
$order_id = $data.order_id; // 更改全局变量
},
error: function() { // 如果当前网页请求出现了问题也继续请求,如:断网等。。。
initOrderId();
}
});
}
var playVoice = function(){
$.ajax({
url: "{{url('/wechat/order/voice')}}",
async: false,
data: {order_id: $order_id},
type: "GET", //请求方式
success: function($data) {
if ($data != '' && $data != undefined && $data.voice) { // 判断是否有对象和语音 如果有语音的情况处理
$order_id = $data.order_id;
$audio.src = $data.voice; // 更改播放源
$audio.play(); // 播放
$audio.onended = function () { // 监听当前语音播放完毕,才进行下一步操作
if ($set_voice.checked){ // 如果上面的checkbox对象 被选中的情况下才执行
$request_init = setTimeout("playVoice()", 2000);
}
}
} else { // $data为空则继续每2秒请求一次
$request_init = setTimeout("playVoice()", 2000);
}
},
error: function() { // 出现错误的情况下也要继续执行请求 ,如:断网等情况。。。
$request_init = setTimeout("playVoice()", 2000);
}
});
} // 获取语音的开关checkbox对象
var $set_voice = document.getElementById('set_voice');
// 加载页面开始初始化判断
if ($set_voice.checked) {
// 使用微信内置的js 对象实现ios 微信端中启动音频自动播放
document.addEventListener("WeixinJSBridgeReady", function () {
$audio.play();
}, false); initOrderId(); // 请求id,可忽悠不看
playVoice(); // 必用的要请求的函数
} // 开关改变事件 ---用户是否开启或关闭语音的行为进行保存
$set_voice.onchange = function () {
var $this=this; // 先接收好this对象,方便下面调用
if ($this.checked) { // 判断是否选中(表示开启语音)
$this.checked=false; // 在回调未成功之前不能改变按钮的状态 --这里可以自行判断优化处理
// 再次取最新的订单号
$.get("{{url('/wechat/voice/edit')}}", {type: "{{$type}}", status: 1},function (data) {
if(data==1){ // 后台返回1表示成功,0表示失败,这里只做1的判断
$this.checked=true; // 在回调成功之后改变按钮的状态
initOrderId();
playVoice();
}
},'text');
} else { // 关闭
$audio.pause();// 停止播放
$this.checked=true; // 在回调未成功之前先不更改
$.ajax({
url: "{{url('/wechat/voice/edit')}}",
async: false,
data: {type: "{{$type}}", status: 2},
type: "GET", //请求方式
success: function($data) {
if($data==1){
clearTimeout($request_init); // 此处销毁setTimeout意义其实并不是很大了,可自行看着处理,因为上面是在onended事件中调用,通过checked判断是否调用请求函数
$this.checked=false; // 回调成功后才执行更改
}
},
error: function(){ // 如果出现错误情况进行处理,可自己编写处理,我这里就不再处理了 }
});
}
};
</script>
html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)的更多相关文章
- html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端
// vue2 组件封装如下: <template> <div> <div><!--vue element 组件的引用 Switch 开关 不懂请自行百度(重 ...
- 微信h5页面audio标签在ios下不能自动播放
背景介绍:在一个h5页面中,当用户提交表单到后台,后台返回的结果成功的话,开始自动播放背景音乐 出现的问题:在安卓手机上正常,iOS中没有反应 后来网上一番搜索后了解到时因为iOS不允许自动播放音乐, ...
- HTML5 音频 <audio>
HTML5 提供了播放音频的标准. 一.Web 上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插 ...
- HTML5音频audio属性
来源:https://segmentfault.com/a/1190000008932943?utm_source=tuicool&utm_medium=referral audio 的控制函 ...
- IOS微信端软键盘收起后界面按钮失效问题
问题描述: 1.在vue里封装了一个confirm的弹窗(即如下一个弹窗) 2.发现在IOS微信客户端中打开后,当需要在表单中输入内容的时候,很自然的点击了键盘右上角的[完成]按钮 3.啊~~~,惊人 ...
- 解决在ios下不能自动播放音频的问题
在ios下面是不允许自动播放音频这个操作的,不过我们可以使用微信提供的sdk来做到自动播放音乐的功能 wx.ready(()=>{}) 引入微信的sdk,之后在回调函数里面执行主动触发背景音乐播 ...
- H5页面解决IOS进入不自动播放问题(微信内)
废话少说,直接上代码. 主要还是调用微信的jdk做兼容处理.,安卓可自动播放. ($(function(){ $(function(){ /* ** 复选框*/ $('.ul-radio').on(' ...
- iOS背景音乐不自动播放
iOS 内置浏览器safari不允许自动播放音乐.我们需要通过WeixinJSBridgeReady()函数实现自动触发 document.addEventListener("WeixinJ ...
- 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况
对比audio标签 和 Web Audio API 各平台浏览器的支持情况: audio element Web Audio API desktop browsers Chrome 14 Yes ...
随机推荐
- openSUSE 跨版本升级
准备工作 此方法通过网络跨版本升级,适合 Leap 升级到下一个发行版(如 42.2 升级到 42.3),也适合 Leap 升级为 Tumbleweed.首先必须确定升级的时候有足够的时间.靠谱的更新 ...
- Dubbo封装rest服务返回结果
由于Dubbo服务考虑到一个是给其他系统通过RPC调用,另外一个是提供HTTP协议本身系统的后台管理页面,因此Dubbo返回参数在rest返回的时候配置拦截器进行处理. 在拦截器中,对返回参数封装成如 ...
- 《移动Web前端高效开发实战》笔记4--打造单页应用SPA
路由是一个单页应用的核心,大部分前端框架都实现了一个复杂的路由库,包括动态路由,路由钩子,组件生命周期甚至服务器端渲染等复杂的功能.但是对于前端开发者而言,路由组件的核心是URL路径到函数的映射,了解 ...
- JAVA程序员必须要学习的知识
Java是热门的语言之一,TIOBE编程语排名Java排名第二,仅在C语言之后.Java可以用来开发web应用和桌面应用,更重要的是Java具有跨平台性:write once, run everywh ...
- Nginx和Apache服务器上配置反向代理
在实际项目过程中,由于网站要用到一个在线编辑器(个性化的在线编辑软件),需要跨域进行通信!由于跨域通信较多,所以当时就想到在网站服务器上代理编辑软件的请求! 这就是“反向代理”的实际需求! 一.Ngi ...
- 【LeetCode】9 Palindrome Number 回文数判定
题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...
- UVA 624 CD(01背包,要记录路径)
题意: 有n张CD(n<=20),每张能播放的时长不同.给定一个时长限制t,挑出部分的CD使得总播放时间最长.顺便输出路径! 思路: 重点在输出路径,否则这题很普通.那就要用二维数组记录每个CD ...
- [大坑]Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
报错tensorflow/stream_executor/cuda/cuda_dnn.cc:338] Could not create cudnn handle: CUDNN_STATUS_INTER ...
- springmvc 的原理分析
1. 用户发送请求至前端控制器(DispatcherServlet) 2.DispatcherServlet 将受到的请求调用HandlerMapping 处理映射器 3.处理器映射器根据配置注解找到 ...
- python实现单链表翻转
题目描述: 翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑 ...