我得到了这个鼠标悬停效果,你可以在this CodePen上看到。
光标始终是红色的,但我希望当它悬停在其中一个项目上时,它会变成一个更大(缩放)的白色光标。<div class="custom-cursor"></div>
(这是光标div
,它总是红色的,通过JS我让这个div
跟随我的光标)。
然后我们有我们的元素:
<div class="row-02-rig-sin black-cursor">
...
</div>
上面是<div>
,我想让光标改变形状和颜色。为了做到这一点,我做了一个eventListener
,这样我就可以跟踪鼠标何时经过.black-cursor
的类名。下面是它的JS代码:
document.addEventListener("mouseover", function (e) {
if (e.target.matches(".black-cursor")) {
customCursor.classList.add("is-hovering");
}
});
当鼠标悬停在div
上时,上面的代码“应该”工作(并且部分工作),但问题是,当光标悬停在.black-cursor
内部的元素上时,e.target.matches()
不会触发。
使用简单的CSS,当光标悬停在.black-cursor
上时,我会改变光标,因为当它返回true时,会有customCursor.classList.add("is-hovering");
。
x1米11米1x
试着在CodePen中玩一下,光标正好放在黑色水平条的顶部。这是e.target
唯一等于正确元素的地方,所以它在那里触发,而不是其他地方。
一个简单的解决方法是跟踪e.target
是否是.black-cursor
父节点的子节点。我可以在每个元素上添加类名.black-cursor
,这样我就可以确保光标正常工作。但我不喜欢这两种解决方案。第一种是耗时的结束-由于计算的原因,mousemove
和第二种解决方案会花费开发人员大量的时间来为所有元素添加相同的类名。
有没有其他的解决方案与性能的优先级?所以没有滞后,没有fps下降会出现.我听说过一个requestAnimationFrame
在这里和那里,但我还没有尝试,因为我不知道它是否会帮助我.
2条答案
按热度按时间lo8azlld1#
您需要使mouseout代码更智能,这样它就不会在每次调用该类时都删除该类。
这个解决方案还不完美,但应该给予你一个起点。
qhhrdooz2#
CodePen已更新为正确代码:
这个被替换了。。
......用这个: