我们知道在JS中并没鼠标长按事件,但我们仍然能通过mousedown、mouseup事件来实现判断鼠标左键被按住不放的状态,原理其实很简单,只要在思路上解决以下3个问题:
1. 按住不放,就是按下,并没有立刻弹起.
2. [假设按下1s,有效]在mousedown方法下我们编写处理代码,但是要让他在1s后运行.对,setTimeout.
3. 这是还有一个问题,点击也会触发.这时我们需要在mouseup方法处理.当鼠标弹起时,我们判断此时setTimeout是否被运行,如果被运行,那说明mousedown超过一分钟,就不做任何处理.否则,说明没有按住鼠标一定时间[超过1s],则终止mousedown的方法,既是终止setTimeout.故,clearTimeout.
<!DOCTYPE html> <html>
<head>
<title>JS判断鼠标按住不放触发事件</title>
<script src="/demo/js/jq.js"></script>
<script>
$(document).ready(function() {
$("input").mousedown(function() {
var flag = false;
var stop;
stop = setTimeout(function() {//down 1s,才运行。
flag = true;
alert("这里可以是你想执行的代码.");
}, 1000);
$("input").mouseup(function() {//鼠标up时,判断down了多久,不足一秒,不执行down的代码。
if (!flag) {
clearTimeout(stop);
}
});
});
});
</script></head><body>
<input value="按住我1秒钟才行" /></body></html>原生JS代码:
<!DOCTYPE HTML> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>鼠标长按</title>
</head>
<body>
<input type="button" onmousedown="holdDown()" onmouseup="holdUp()" value="鼠标长按"/>
<script type="text/javascript">
var timeStart,timeEnd,time;//申明全局变量
function getTimeNow()//获取此刻时间
{
var now=new Date();
return now.getTime();
}
function holdDown()//鼠标按下时触发
{
timeStart=getTimeNow();//获取鼠标按下时的时间
time=setInterval(function()//setInterval会每100毫秒执行一次
{
timeEnd=getTimeNow();//也就是每100毫秒获取一次时间
if(timeEnd-timeStart>1000)//如果此时检测到的时间与第一次获取的时间差有1000毫秒
{
clearInterval(time);//便不再继续重复此函数 (clearInterval取消周期性执行)
alert("长按时要执行什么呢?");//并弹出代码
}
},100);
}
function holdUp()
{
clearInterval(time);//如果按下时间不到1000毫秒便弹起,
}
</script>
</body> </html> 






网友评论文明上网理性发言 已有0人参与
发表评论: