关于touch事件的长按和取消长按的BUG问题

学无止境之问道 2017-04-06 02:38:47
今天做一个相当于微信获取语音的按钮,长按按钮,进行录音,松开按钮,录音结束。我使用的是touchable.js这个库。



这个按住说话有个class=“”clickRecord“”;
我的js 代码如下:
var time ;
var record;
var h = 0;
var m = 0;
var s = 0;
document.addEventListener("plusready", function() {
//初始化录音对象
record = MediaUtil.getRecord();
record.maxtime = 3600;
record.path = "res:page/user";
});
var Record = $(".clickRecord").Touchable();
//一直按住触发事件
Record.bind("touchstart",function(){
if(typeof(ExMobiWindow) != "undefined" && record){
weui.Alert("21");
$(".recording").show();
$(this).find("img").attr("src","../img/record1.png");
//时间
time = setInterval(function(){
s++;
if(s > 59){
s = 0;
m++;
}
if(m > 59){
m = 0;
h++;
}
var allTime = (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s);
$("#allTime").text(allTime)
},1000);
//开始录音;
if(record.isRecord()){
return;
}
record.startRecord();
}

})
//松开后触发事件
Record.bind("touchend",function(){
//结束录音;
if(typeof(ExMobiWindow) != "undefined"){
//清空时间
clearInterval(time);
s = m = h = 0;
$("#allTime").text("00:00:00");
$(".recording").hide();
$(this).find("img").attr("src","../img/record.png");
record.stopRecord();
var Repath = record.value;//路径
var recordTime = record.recordtime;
var fileName = Repath.split("record")[1];
if(recordTime < 1){
weui.Alert("录音时间太短",function(){});
return;
}
var param = "<div class='weui_cell tianjia'><div class='weui_cell_hd records' fileName='" + fileName + "' src='"+ Repath +"'>"+ fileName +"</div><div class='weui-cell__ft pice'><img src='../img/autoPlay.png' id='autoPlay'/><img src='../img/delete.png' id='delete'/></div></div>"
$(".main").append(param);
}
});
其中判断ExMobi不用管,是在能一个框架下运行时进行录音和停止录音。

现在测试之后一切都比较可以,可是有一个小BUG ,在我松开按钮后如果录音时间小于1s的话我不会存储这个录音,现在是我在测试的时候 多次点击了这个按钮但没有长按,他会多次提醒我 录音时间太短 ,点击过多后,如果我下次长按了,反而却无法录音了。现在这个地方就出现了一个小Bug了。
换句话说:我如果按正常的微信方式点击录音是没有问题的,但是一旦我点击多次按钮,时间不够,下次再长按就会失效。
这个bug怎么解决啊?
...全文
848 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
functionsub 2017-04-06
  • 打赏
  • 举报
回复
touchstart事件里增加几百毫秒的延迟。
var touchStartTimer;
Record.bind("touchstart",function(){
    if(touchStartTimer){
         clearTimeout(touchStartTimer);
    }
    touchStartTimer = setTimeout(function(){
        // 原逻辑
    },200);
});

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧