audio标签中调用php,html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些p...

// vue2 组件封装如下:

语音播报

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);

})

}

}

},

};

// ----------------------------------------------以上为vue2的组件-----------------------------------------------仅供参考

// 在html模版中使用如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值