gpt4 book ai didi

javascript - 使用移动元素跟踪鼠标悬停事件

转载 作者:行者123 更新时间:2023-11-27 23:27:00 31 4
gpt4 key购买 nike

我正在开发一个应用程序,遇到了一个非常简单但令人沮丧的问题。本质上我有一个移动元素,我想跟踪它在鼠标上移动的时间。所以目前,如果指针在屏幕中间并且在盒子经过它时没有移动,则不会触发任何事件。是否有任何类型的鼠标或指针事件我可以在盒子经过它时触发事件?

谢谢。我写的简单代码示例如下:

<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
</head>
<body>
<div id="box" style="height:300px;width:300px;background-color:green;position:absolute;top:600px;"></div>
<script>
var box = document.getElementById('box');
box.addEventListener('onmouseover',function(e){
console.log('im being tagged!')
});
$('#box').animate({top: '1px'},3000);
</script>
</body>
</html>

到目前为止我尝试过的事件:onmouseover、mouseover、mouseenter、mousemove、pointerenter、pointerover

指针事件来自名为 pep 的库。

最佳答案

由于您希望知道移动的 box 元素何时与鼠标发生碰撞,而不是相反,因此您需要为该碰撞设置一个循环检查。您需要计算并保留鼠标光标的位置并使用 document.elementFromPoint检查光标上方的元素是否为 box:

$(document).ready(function() {
var MouseCoords = function(x, y) {
this.x = x;
this.y = y;
};

var mousecoords = new MouseCoords(0,0);
var isTagged = false;

$( document ).on( "mousemove", function( event ) {
mousecoords.x = event.pageX;
mousecoords.y = event.pageY;
});

$('#box').animate({top: '1px'},3000);

function isBoxOverMouse() {
var collidingElement = document.elementFromPoint(mousecoords.x, mousecoords.y);
if (collidingElement != null && collidingElement.id == "box") {
if (!isTagged) {
isTagged = true;
console.log("Tag!");
}
} else {
isTagged = false;
}
}

setInterval(isBoxOverMouse, 500);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box" style="height:300px;width:300px;background-color:green;position:absolute;top:600px;"></div>

我将循环设置为每 500 毫秒触发一次,但如果这不是您想要的频率,则可以更改。我还设置了一个 isTagged 变量,这样控制台就不会多次报告相同的碰撞,所以如果您希望在每个检查间隔报告碰撞,请随意删除它。

关于javascript - 使用移动元素跟踪鼠标悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37977834/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com