我在一个名为“. background”的父div中随机放置了一堆span元素。这些都是用JavaScript生成的。就像这样:
<span class="circle" style="width: 54px; height: 54px; background: #5061cf; top: 206px; left: 306px"></span>
我想让它们在鼠标靠近时移开(或排斥),但我不知道如何做到这一点!如何在jQuery中实现这一点?
我想你必须搜索附近的跨度,然后改变它们的位置,如果它们在鼠标周围的一定半径内,但我真的不知道从哪里开始。感谢您的帮助!
3条答案
按热度按时间noj0wjuj1#
一个简单的方法是将每个跨度包裹在另一个更大的跨度中。使其在每一侧都按您希望鼠标能够接近内部跨度的最小距离增大。绑定一个函数(
evade
),将每个 Package 器移动到 Package 器上的mouseover
。这种方法为您提供了一个方形边框,因此如果内部跨度中的图形元素不是方形的,则从鼠标到图形元素边框的距离不会是恒定的,但很容易实现。或者,使用缓冲器进行粗略的接近测试。与其将evoke函数绑定到
mouseover
,不如在mousemove上绑定一个函数(beginEvade
)来绑定evade
。另外,将一个函数绑定到mouseout
,取消绑定evade
。然后,您的evade
可以执行更精确的接近测试。首先,找到一个提供矢量类型的好的几何库。如果没有,这里有一个示例实现:
接下来是一个示例循环规避函数(这是最容易实现的)。大纲:
1.计算保险杠的中心(保险杠的corner加上outer dimensions除以一半)
1.计算鼠标偏移矢量(从mouse cursor到元素中心)
1.接近测试:如果距离>=最小允许距离,则提前返回。
1.计算delta:到鼠标光标的距离太小,所以我们需要从缓冲器所在位置到它应该所在位置的向量(delta)。拉长偏移向量,使其成为缓冲器中心相对于鼠标位置的最小允许距离。减去偏移向量,得到从邻近边缘到鼠标的增量,这也恰好是增量。
1.计算新位置:
1.将delta值添加到当前位置。
1.边界检查:将圆的所有边界保留在文档内。
1.移动保险杠
在代码中:
之后,剩下的就是绑定/取消绑定
evade
的函数,以及设置所有内容的调用。您可以在jsFiddle中预览此内容
cnjp1d6j2#
你可以用jQuery选择所有具有类circle的对象,把它放在一个变量中,然后通过循环遍历它们来检查mousemove(也可以用jQuery完成),如果一个对象在鼠标的某个半径内。
1tu0hz3e3#
这个问题和答案是非常有用的,作为一个开始的地方,我写了一个脚本,以排斥一个图像与光标。我已经迭代了前面的答案,以支持矩形元素,而不仅仅是方形元素。我在下面包含的示例代码也使用了Web API而不是jQuery库,因此代码将在浏览器中运行而没有任何额外的依赖关系,并且在移动排斥图像时还考虑了窗口滚动。
一个JSFiddle示例是here,下面包含了相同的代码。