只有当鼠标按下时,我才需要实现鼠标移动事件。
只有在鼠标按下并且鼠标移动时,我才需要执行“OK Moved”。
我使用了这段代码:
$(".floor").mousedown(function() {
$(".floor").bind('mouseover',function(){
alert("OK Moved!");
});
})
.mouseup(function() {
$(".floor").unbind('mouseover');
});
只有当鼠标按下时,我才需要实现鼠标移动事件。
只有在鼠标按下并且鼠标移动时,我才需要执行“OK Moved”。
我使用了这段代码:
$(".floor").mousedown(function() {
$(".floor").bind('mouseover',function(){
alert("OK Moved!");
});
})
.mouseup(function() {
$(".floor").unbind('mouseover');
});
使用 mousemove
事件。
来自于 JQuery 文档中的 mousemove
和 mouseover
:
mousemove
事件会在鼠标指针在元素内部移动时被发送到该元素。
mouseover
事件会在鼠标指针进入元素时被发送到该元素。
示例:(查看控制台输出)
$(".floor").mousedown(function () {
$(this).mousemove(function () {
console.log("OK Moved!");
});
}).mouseup(function () {
$(this).unbind('mousemove');
}).mouseout(function () {
$(this).unbind('mousemove');
});
在纯javascript中,你可以通过以下方法实现:
function mouseMoveWhilstDown(target, whileMove) {
var endMove = function () {
window.removeEventListener('mousemove', whileMove);
window.removeEventListener('mouseup', endMove);
};
target.addEventListener('mousedown', function (event) {
event.stopPropagation(); // remove if you do want it to propagate ..
window.addEventListener('mousemove', whileMove);
window.addEventListener('mouseup', endMove);
});
}
然后按照以下方式使用该函数:
mouseMoveWhilstDown(
document.getElementById('move'),
function (event) { console.log(event); }
);
(提示: 在上面的示例中,您不需要该函数 - 您可以将其作为 mouseMoveWhilstDown(document.getElementById('move'), console.log)
调用,但您可能想要做一些与之不同的事情!)
我知道这个问题大约七年前已经提交并解决了,但现在有一个更简单的解决方法:
element.addEventListener('mousemove', function(event) {
if(event.buttons == 1) {
event.preventDefault();
// Your code here!
}
});
element.addEventListener('touchmove', function(event) {
if(event.touches.length == 1) {
event.preventDefault();
// Your code here!
}
}
要了解更多关于 MouseEvent.buttons 的信息,请单击此处访问MDN Web Docs。然而,与鼠标事件不同,触摸设备通常会侦听TouchEvent。 TouchEvent.touches.length 可以实现与 MouseEvent.buttons 类似的效果。
为了提供示例,我使用以下代码移动了一个创建的元素。为了移动元素,我使用了 'mousemove' 事件的 MouseEvent.movementX 和 MouseEvent.movementY 简化了代码。'touchmove' 事件没有这些属性,因此我存储了先前的触摸坐标,并在 'touchstart' 上将其清除。如果需要,您可以对 'mousemove' 事件执行类似操作,因为 movementX 和 movementY 值可能在不同的浏览器中有所不同。
document.addEventListener('DOMContentLoaded', () => {
var element = document.getElementById('box');
element.style.position = 'fixed';
// MouseEvent solution.
element.addEventListener('mousemove', function(event) {
if(event.buttons == 1) {
event.preventDefault();
this.style.left = (this.offsetLeft+event.movementX)+'px';
this.style.top = (this.offsetTop+event.movementY)+'px';
}
});
// TouchEvent solution.
element.addEventListener('touchstart', function(event) {
/* Elements do not have a 'previousTouch' property. I create
this property during the touchmove event to store and
access the previous touchmove event's touch coordinates. */
delete this.previousTouch;
});
element.addEventListener('touchmove', function(event) {
if(event.touches.length == 1) {
event.preventDefault();
if(typeof this.previousTouch == 'object') {
this.style.left = (this.offsetLeft+event.touches[0].pageX-this.previousTouch.x)+'px';
this.style.top = (this.offsetTop+event.touches[0].pageY-this.previousTouch.y)+'px';
}
this.previousTouch = {
x: event.touches[0].pageX,
y: event.touches[0].pageY
};
}
});
});
#box {
width: 100px;
height: 100px;
padding: 1ch;
box-sizing: border-box;
background-color: red;
border-radius: 5px;
color: white;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="box">Drag Me!</div>
</body>
</html>
默认行为会阻止鼠标移动和鼠标松开事件的运行,你可以通过在mousedown函数中添加event.preventDefault()来解决这个问题。
请确保在触发preventDefault()时使用与mousedown函数中传递的相同参数名称,否则它将无法正常工作。在下面的示例中,我将event作为参数传递给mousedown函数,然后通过键入event.preventDefault()来触发preventDefault()。
let sliderImages = Array.from(document.getElementsByClassName('slidess'));
const sliderPos = sliderImages.forEach( function (slide, index) {
let mousePosStart, isDown = false;
slide.addEventListener('mousedown', mousedown)
slide.addEventListener('mousemove', mousemove)
slide.addEventListener('mouseup', mouseup)
function mousedown(event) {
if (isDown == false) {
mousePosStart = event.pageX - this.offsetLeft;
isDown = true;
event.preventDefault();
}
}
function mousemove(event) {
if (isDown == true) {
let mousePosMove = event.pageX - this.offsetLeft;
}
}
function mouseup(event) {
if (isDown === true) {
isDown = false;
let mousePosEnd = event.pageX - this.offsetLeft;
}
}
});