// 设置语音播报对象
|
var Voice = function() {
|
this.speak = window.speechSynthesis;
|
this.tospeak = new SpeechSynthesisUtterance('');
|
this.voice = '';
|
this.zh_CN = false;
|
this.rate = 1.5;
|
this._setLang(); // 获取并检测是否有中文的环境
|
this.timeInterval = 27; //循环间隔(秒)
|
this.speak_enable = true; //ture:开启语音播报 false:停止语音播报
|
};
|
|
// 播报语音 (调用发声的方法时请使用延时发声)
|
Voice.prototype.play = function(txt,callback) {
|
if(!this.zh_CN) {
|
console.info('你的电脑不支持中文播报!');
|
}
|
_timeInterval = this.timeInterval;
|
//console.info(this.speak_enable);
|
if(!this.speak_enable){ //识别是否开启声音播报
|
if(callback && typeof callback == 'function'){
|
setTimeout(function(){
|
callback();
|
}, Math.abs(_timeInterval)*1000);
|
}
|
return;
|
}
|
this.cancel();
|
this.tospeak.text = txt;
|
this.tospeak.voice = this.voice; // 设定中文播报
|
this.tospeak.rate = this.rate;
|
//console.info(to_speak);
|
var starttime = new Date();
|
this.speak.speak(this.tospeak);
|
//console.info(this.tospeak);
|
this.tospeak.onend = function(event) {
|
//console.info("播放结束");
|
if(callback && typeof callback == 'function'){
|
var endtime = new Date();
|
var timelong = (endtime.getTime()-starttime.getTime())/1000;
|
//console.info(parseInt(_timeInterval)+"==="+parseInt(timelong));
|
if(timelong > this.timeInterval){
|
callback();
|
}else{
|
setTimeout(function(){
|
callback();
|
}, Math.abs(_timeInterval-timelong)*1000);
|
}
|
}
|
};
|
|
|
};
|
|
// 开启/关闭当前语音播报 (依赖与base.js导入的Cookie方法)
|
Voice.prototype.changeSpeak = function(bool) {
|
this.speak_enable = bool;
|
setCookie('voice', bool);
|
// 退出当前播报
|
if(!bool) {
|
this.cancel();
|
}
|
};
|
|
// 退出当前播报
|
Voice.prototype.cancel = function() {
|
this.speak.cancel();
|
};
|
|
|
//停止语音播报
|
Voice.prototype.stopSpeak = function() {
|
this.speak.cancel();
|
this.speak_enable = false;
|
};
|
|
// 检查当前语言环境
|
Voice.prototype._setLang = function() {
|
var _this = this;
|
setTimeout(function(){
|
var voices = _this.speak.getVoices();
|
for(var i=0; i<voices.length; i++) {
|
var _voices = voices[0];
|
//console.info(_voices);
|
if(_voices.lang === 'zh-CN') {
|
_this.zh_CN = true;
|
_this.voice = _voices;
|
}
|
}
|
}, 0);
|
};
|
|
|
|
var voice = new Voice();
|
var voiceStatus = checkPageVoiceStatus();
|
// 设置初始语音播报状态
|
voice.changeSpeak(voiceStatus);
|
voice.cancel();
|
|
// 设置初始化语音播报图标
|
if(!voiceStatus) {
|
$('.web-status .cell-list.voice').addClass('close-voice');
|
}
|
|
// 点击声音的图标
|
$('.web-status .cell-list.voice').click(function() {
|
$(this).toggleClass('close-voice');
|
// 判断是否关闭声音
|
if($(this).hasClass('close-voice')) {
|
voice.changeSpeak(false);
|
}else {
|
voice.changeSpeak(true);
|
}
|
});
|
|
// 获取页面语音是否开启
|
function checkPageVoiceStatus() {
|
var voiceStatus = getCookie('voice');
|
// 设置初始语音播报状态
|
voiceStatus = voiceStatus=='false'?false:true;
|
|
return voiceStatus;
|
}
|