html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端
// vue2 组件封装如下:
<template>
<div>
<div><!--vue element 组件的引用 Switch 开关 不懂请自行百度(重点参考js部分 如果不熟悉element switch略过就可以了)-->
语音播报 <el-switch v-model="openVoice" active-value="1" inactive-value="0" @change="change_voice" :disabled="validate"></el-switch>
</div>
<div><audio src="" id="audio"></audio></div>
</div>
</template> <script type="text/javascript"> var request_init; // 接收setTimeout() 返回的 ID 值
var order_id = 0; // 初始化订单id
$.ajaxSettings.async = false; // 禁止异步请求,
// 取最新的订单id
$.get('/order/voice', function ($data) {
order_id = $data.order_id;
}) export default {
props: { //模板传递属性
voiceStatus: {
type: String,
required: true
},
},
data(){
return {
openVoice:this.voiceStatus,
validate:false
} },
// 加载完成后执行
mounted:function(){
if(this.openVoice==1){
this.voice_play();
}
},
methods: {
// 封装播放语音的方法
voice_play(){
var audio=document.getElementById('audio'); // 音频播放对象标签
var $this=this;
$.ajax({
url: '/order/voice',
type: 'get',
data: {order_id: order_id},
dataType: "json",
success: function($data){
if ($data != '' && $data != undefined) { // 如果有语音的情况处理
$this.validate=false; // 来网络时开启按钮
order_id = $data.order_id;
audio.src = $data.voice;
audio.play();
audio.onended = function () {
if($this.openVoice==1) {
clearTimeout(request_init);
request_init=setTimeout(function(){$this.voice_play()},2000); // 以匿名函数形式设置settimeout即可实现两秒请求一次
}
}
} else {
$this.validate=false; // 来网络时开启按钮
clearTimeout(request_init);
request_init=setTimeout(function(){$this.voice_play()},2000);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$this.validate=true; // 断网就禁用此按钮 继续往下执行请求
request_init=setTimeout(function(){$this.voice_play()},2000);
//console.log(XMLHttpRequest);
}
})
},
change_voice(event){
var audio=document.getElementById('audio'); // 音频播放对象标签
var $this=this;
if (event==1) { // 判断是否选中(表示开启语音)
$this.openVoice='0'; // 在回调未成功之前不能改变按钮的状态
// 再次取最新的订单号
$.get('/order/voice', function ($data) {order_id = $data.order_id;})
$this.$http.get('/system/voice/index', {params: {status: 1}})
.then(res => {
if(res.data==1){ // res.data由后台返回 1表示成功 0表示失败,目前只考虑成功
$this.openVoice='1'; // 在回调成功之后改变按钮的状态
$this.voice_play();
}
})
.catch(_=>{})
} else { // 关闭
$this.openVoice='1'; // 在回调未成功之前不能改变按钮的状态
audio.pause(); // 停止播放
$this.$http.get('/system/voice/index', {params: {status: 2}})
.then(res => {
if(res.data==1){
$this.openVoice='0'; // 在回调成功之后改变按钮的状态
clearTimeout(request_init); // 终止setTimeout 定时回调
}
})
.catch(_=>{
$this.validate=true; // 断网就禁用此按钮
request_init=setTimeout(function(){$this.voice_play()},2000);
})
}
}
},
};
</script>
// ----------------------------------------------以上为vue2的组件-----------------------------------------------仅供参考
// 在html模版中使用如下:
<div >
<!--$voice 是后台php传参过来的 只会为0和1-->
<voice voice-status="{{ $voice }}"></voice>
</div>
html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端的更多相关文章
- html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)
// html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...
- vue组件定义方式,vue父子组件间的传值
vue组件定义方式,vue父子组件间的传值 <!DOCTYPE html> <html lang="zh-cn"> <head> <met ...
- python 日志的配置,python对日志封装成类,日志的调用
# python 日志的配置,python对日志封装成类,日志的调用 import logging # 使用logging模块: class CLog: # --------------------- ...
- vue_music:封装scroll.vue组件
在项目中经常用到滚动,结合Better-scroll封装了sroll.vue组件参考链接:https://ustbhuangyi.github.io...http://www.imooc.com/ar ...
- vue 组件通讯方式到底有多少种 ?
前置 做大小 vue 项目都离不开组件通讯, 自己也收藏了很多关于 vue 组件通讯的文章. 今天自己全部试了试, 并查了文档, 在这里总结一下并全部列出, 都是简单的例子. 如有错误欢迎指正. 温馨 ...
- 【C++】将调用第三方库的代码封装成动态库供上层调用
需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...
- vue 组件 - 函数统一调用(自定义钩子)
vue 组件继承方法 var childComponent = Vue.extend( { extends: baseComp, // 继承基础组件方法 template:template, wait ...
- Vue以CDN方式调用Swiper轮播异常
问题概览: 有一个小型单页应用项目,嫌用组件式调用vue-swiper麻烦,因此以CDN的方式调用swiper,结果轮播的图不动了! 爬了半天百度和谷歌都无解决方案,最后曲线救国的方式解决了问题. 解 ...
- echart——vue封装成公共组件
<!-- 自定义Echarts * options: Object,//数据 * theme: String,//主题 * initOptions: Object,//初始化 * group: ...
随机推荐
- 题解 P1006 传纸条
传送门 其实我觉得这个跟P1004挺类似(又是动规) 题解P1004 #include<iostream> #include<cstdio> #include<cstri ...
- zk实现服务选举
非公平选举算法1)首先通过zk创建一个 /server 的PERSISTENT节点 2)多台机器同时创建 /server/leader EPHEMERAL子节点 3)子节点只能创建一个,后创建的会失败 ...
- 一起来学Spring Cloud | 第四章:服务消费者 ( Feign )
上一章节,讲解了SpringCloud如何通过RestTemplate+Ribbon去负载均衡消费服务,本章主要讲述如何通过Feign去消费服务. 一.Feign 简介: Feign是一个便利的res ...
- JAVA常量介绍
常量: 在程序执行过程中,其值不发生改变的量: 1.分类: 字面值常量和自定义常量: 1.字面值常量有以下几种: 字符串常量.小数常量.整数常量.字符常量.布尔常量(true.false).空 ...
- 表单和HTML5
1.form表单 <form action="" method=""> </form> action: 规定当提交表单时,向何处发送表单 ...
- iOS 应用架构 (三)
iOS 客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答 iOS 应用架构中的种种问题,本文是其中的第二篇,主要讲 View 层的组织和调用方案.下篇主要讨论做 Vi ...
- ArcServer10.1系列产品之ArcGIS Web Adaptor (IIS)
1.关于 ArcGIS Web Adaptor 通过 ArcGIS Web Adaptor,可以将 ArcGIS for Server 与您现有的 Web 服务器进行集成.ArcGIS Web Ada ...
- 微软大礼包 | 集合在线学习资源,助你秒变AI达人
编者按:人工智能的浪潮正如火如荼地袭来,未来人工智能将大有所为,人们的生活轨迹也正在技术不断向前推进的过程中逐渐改变.人工智能不是科研人员或开发人员的专属,微软希望能够将人工智能带给每个人,从开发者到 ...
- 快速搭建高可用 LNMP Web应用基础架构
云服务器费用:查看费用 产品详情 产品介绍 本镜像是根据Azure Resource Manager模板创建的,基于资源组下的高可用web系统,主要包括前端web负载均 ...
- IE浏览器已经卸载,但是桌面上的图标却无法删除的解决方案
第一步——win+R运行[regedit],打开注册表. 第二步——在注册表里面依次找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer ...