问题说明
有时候同一个元素需要绑定单击和双击事件。比如单击负责调出菜单,双击负责调出本地文件。。。绑定单击事件可以用mousedown或者click,绑定双击事件则是用dbclick。
问题:往往触发单击事件后,不再触发双击事件。
解决(计算时间差)
在网上搜索的方法大都是利用setTimeout定时器解决的,单击时会延迟设定的毫秒数再执行单击的代码。
如果想要单击和双击都立即响应,可以试试下面手动计算时间差的方法:
// style
.box {
width: 300px;
height: 300px;
background-color: #87CEEB;
}
// html
<div class="box">
单击或双击我~
</div>
var downClickTime = 0 // 记录当前鼠标按下的时间戳
var upClickTime = 0 // 记录前一次鼠标抬起的时间戳
var time = 0 // 两次点击的时间间隔
$('.box').mousedown(function() {
downClickTime = (new Date()).getTime() // 获取鼠标按下时的时间戳
console.log('downClickTime:'+downClickTime)
time = downClickTime - upClickTime // 计算两次点击鼠标的间隔
console.log('time:'+time)
if (time < 300) {
// 处理双击事务
console.log('您双击了~')
} else {
// 处理单击事务
console.log('您单击了~')
}
})
$('.box').mouseup(function() {
upClickTime = (new Date()).getTime() // 获取鼠标松开时的时间戳
console.log('upClickTime:'+upClickTime)
})