jQuery 单击和拖动时的 mouseup 事件
jQuery mouseup event on click and drag
我试图在用户单击框时显示 div
。我尝试使用此代码:
$(document).ready(function(){
$(".hold").mousedown(function(){
$(".box").css("height","200px");
});
$(".hold").mouseup(function(){
$(".box").css("height","0px");
});
});
但是代码的第二部分,mouseup
事件在我点击和拖动时没有触发回调。
如何让它发挥作用?
<!DOCTYPE html>
<html>
<head>
<title>click and hold project</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="hold"></div>
<div class="box"></div>
<script src="jquery-2.2.3.min.js"></script>
<script src="app.js"></script>
</body>
</html>
试试下面的方法
$(document).ready(function(){
$(".hold").mousedown(function(){
$(".box").css("height","200px");
})
.mouseup(function(){
$(".box").css("height","0px");
});
});
jsfiddle link https://jsfiddle.net/w47anse9/
您的代码按原样运行。您是要拖动还是展开框?我只是给它添加了样式。
.hold {
width: 50px;
height: 50px;
background-color: yellow;
}
.box {
width: 100px;
background-color: black;
}
这是 fiddle 和您的代码:jsfiddle
正如 指出的那样,问题是当您在 .hold
元素上按下鼠标键,然后将鼠标移到其他地方并离开该键时,给定的处理程序在 mouseup
不会被调用,因为它是在 .hold
元素上设置的。
从技术上讲,事件的目标在那种情况下会有所不同,因此它不会匹配 .hold
元素,最终不会触发 mouseup
事件的回调函数。
对此的解决方法是在开头添加指向被点击元素的指针,然后在文档元素上添加事件侦听器并检查 event.target
是否与被点击元素相同。
如果不相同,我们将手动触发.hold
元素的事件,如下:
$(document).ready(function(){
var mouseTarget;
$(".hold").on('mousedown', function(){
$(".box").css("height", "200px");
mouseTarget = this;
})
.on('mouseup', function(){
$('.box').css("height", "0px");
});
$(document).on('mouseup', function(e) {
if (e.target !== mouseTarget) {
$(mouseTarget).trigger(e.type);
}
});
});
.hold{
background-color: #000;
width: 20%;
height: 10px;
}
.box{
background-color: #f00;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hold"></div>
<div class="box"></div>
值得一提的是document
上设置的回调函数会在冒泡阶段触发
我试图在用户单击框时显示 div
。我尝试使用此代码:
$(document).ready(function(){
$(".hold").mousedown(function(){
$(".box").css("height","200px");
});
$(".hold").mouseup(function(){
$(".box").css("height","0px");
});
});
但是代码的第二部分,mouseup
事件在我点击和拖动时没有触发回调。
如何让它发挥作用?
<!DOCTYPE html>
<html>
<head>
<title>click and hold project</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="hold"></div>
<div class="box"></div>
<script src="jquery-2.2.3.min.js"></script>
<script src="app.js"></script>
</body>
</html>
试试下面的方法
$(document).ready(function(){
$(".hold").mousedown(function(){
$(".box").css("height","200px");
})
.mouseup(function(){
$(".box").css("height","0px");
});
});
jsfiddle link https://jsfiddle.net/w47anse9/
您的代码按原样运行。您是要拖动还是展开框?我只是给它添加了样式。
.hold {
width: 50px;
height: 50px;
background-color: yellow;
}
.box {
width: 100px;
background-color: black;
}
这是 fiddle 和您的代码:jsfiddle
正如 .hold
元素上按下鼠标键,然后将鼠标移到其他地方并离开该键时,给定的处理程序在 mouseup
不会被调用,因为它是在 .hold
元素上设置的。
从技术上讲,事件的目标在那种情况下会有所不同,因此它不会匹配 .hold
元素,最终不会触发 mouseup
事件的回调函数。
对此的解决方法是在开头添加指向被点击元素的指针,然后在文档元素上添加事件侦听器并检查 event.target
是否与被点击元素相同。
如果不相同,我们将手动触发.hold
元素的事件,如下:
$(document).ready(function(){
var mouseTarget;
$(".hold").on('mousedown', function(){
$(".box").css("height", "200px");
mouseTarget = this;
})
.on('mouseup', function(){
$('.box').css("height", "0px");
});
$(document).on('mouseup', function(e) {
if (e.target !== mouseTarget) {
$(mouseTarget).trigger(e.type);
}
});
});
.hold{
background-color: #000;
width: 20%;
height: 10px;
}
.box{
background-color: #f00;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hold"></div>
<div class="box"></div>
值得一提的是document
上设置的回调函数会在冒泡阶段触发