gpt4 book ai didi

javascript - 如何使用 JS 在鼠标移动时将 div 的中心定位到鼠标光标的中心?

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:30 25 4
gpt4 key购买 nike

我正在尝试将 div 元素的中心定位到鼠标光标的中心,这将跟随其移动。

我已经想出了下面的代码,但是这个代码的问题是,下面的 div 没有定位在我的光标的中心,而是偏离了光标一些。

工作流程

我的代码背后的基本思想是,当鼠标进入 .post-entry div 元素时,应该显示当前元素中的 .pointer 并跟随鼠标光标。当鼠标离开 div 时,它应该被隐藏。

代码

HTML 帖子元素:

<article class="col-md-4 col-sm-6 post-entry">
<a href="#" title="">
<figure class="post-thumb">
<img src="http://placehold.it/300x300" alt="">
<div class="pointer" style="background: red;"></div>
</figure><!-- End figure.post-thumb -->
</a>
</article><!-- End article.col-md-4 post-entry -->

JS:

$('.entry .post-entry').each(function() {
$(this).on("mouseenter", mouseEnter);
$(this).on("mousemove", mouseMove);
$(this).on("mouseleave", mouseLeave);
});


function mouseEnter(event) {

console.log('enter');

var target = $(this);
var dot = target.find('.pointer');

var mX = (event.clientX);
var mY = (event.clientY);

set(
dot, {
x: mX,
y: mY,
force3D: !0
}
);

};


function mouseMove(event) {

console.log('move');

var target = $(this);
var dot = target.find('.pointer');

// var offset = target.offset();
// var width = target.width();
// var height = target.height();
// var top = offset.top;
// var left = offset.left;

var mX = (event.clientX);
var mY = (event.clientY);

$(dot).css('-webkit-transform', 'translate3d(' + mX + 'px, ' + mY + 'px, 0)');

};

function mouseLeave(event) {

console.log('leave');

var target = $(this);
var dot = target.find('.pointer');

$(dot).css('-webkit-transform', 'translate3d(0, 0, 0) scale(0, 0)');


};

function onClick(event) {
event.preventDefault();
console.log('click');
};

function set(el, obj) {
var dot = $(el).css('-webkit-transform', 'translate3d(' + obj.x + 'px, ' + obj.y + 'px, 0px)');
return dot;
};

问题/演示

如前所述,span 跟随鼠标光标,只是 span 没有定位到光标的中心。它将偏移鼠标。 See live demo here

我已经为 mX 和 mY 变量尝试过类似的方法,但没有成功:

var mX = (event.clientX - $(this).offset().left) / $(this).width() * $(this).width() - .125 * $(this).width();
var mY = (event.clientY - $(this).offsetTop) / $(this).height() * $(this).height() - .125 * $(this).width();

@hiEven 的回答也不起作用,让我遇到同样的问题:

transform: calc(mX - 50%, mY - 50%)

我知道我应该做一些事情将 .pointer 除以一半,但我应该如何在代码中实现它对我来说是一个很大的问号。

更新

我创建了两个新的 Codepen 元素:

不带图像使用:http://codepen.io/anon/pen/GqGOLv .当您将鼠标悬停在第一个元素上时,您会看到棕色指针正确地跟随您的鼠标光标 - 我正在寻找的东西。但是当鼠标悬停在第二个上时,您会看到红色指针,只有当您位于该元素的最左侧时。

当我使用图像时:http://codepen.io/anon/pen/QExOkx .这个例子的问题是当你在第一列的最顶端时,你会看到棕色指针。当鼠标悬停在第二个元素的左上角时,您会看到一小块红色指针,与没有图像的示例相同。

两个指针都应正确跟随鼠标光标。我正在寻找一种可以使用图像的解决方案。

除了这两个例子,当我给第一个添加一个额外的 margin-left 到第一个元素时,棕色指针不会在鼠标光标的中心,只有当它是设置为 margin-left 零。

所以我不知道缺少什么以及为什么它只适用于第一个示例(没有图像)并且只适用于第一个元素?

最佳答案

试试下面的代码

<html>
<head>
<style>
#mouse_div{
position: absolute;
background-color: black;
}
</style>
<script>
var div_width = 100;
var div_height = 100;
var div_x, div_y;
function mouse_position(event){
var mouse_x = event.clientX;
var mouse_y = event.clientY;
document.getElementById("mouse_div").style.width = div_width + "px";
document.getElementById("mouse_div").style.height = div_height + "px";
div_x = mouse_x - (div_width / 2);
div_y = mouse_y - (div_height / 2);
document.getElementById("mouse_div").style.left = div_x + "px";
document.getElementById("mouse_div").style.top = div_y + "px";
}
</script>
</head>
<body onmousemove="mouse_position(event)" onload="mouse_position(event)">
<div id="mouse_div"></div>
</body>
</html>

此程序获取鼠标的位置、div 的宽度和高度。然后,它获取 x 并从中减去 div 的宽度除以二(这使 div 在鼠标上的 x 位置居中)。然后程序对鼠标 y 做同样的事情。定义所有变量后,我使用 JavaScript 访问 div 的 CSS 以将 div 放置在需要的位置。

注意:必须确保div的位置设置为绝对位置,否则程序将无法运行。

关于javascript - 如何使用 JS 在鼠标移动时将 div 的中心定位到鼠标光标的中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597696/

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