0

我有一个如下的浏览器树。每个节点都是一个具有单独 id 的 div 元素。当鼠标悬停在节点上时,我想更改样式。并在用户左键单击或右键单击节点时执行某些操作。 在此处输入图像描述

问题 1:一些文档说 :hover 选择器存在性能问题。所以我改为监听 mouseover 和 mouseout 事件。推荐这种方式吗?

为了实现我的要求,我想监听每个节点的 mouseover、mouseout、click 和 contextmenu 事件。我有两个解决方案。第一个是将事件处理程序绑定到每个节点。第二个是仅将事件处理程序绑定到根节点。当事件冒泡到根节点时,将调用处理程序。

问题2:两种解决方案哪个性能更好?

4

1 回答 1

1

CSS 在悬停方面通常会优于 JavaScript,它更原生,并且更容易维护(性能不仅限于客户端技术,维护代码的人的性能如何?)。

有时需要在 JavaScript 中模拟悬停效果以支持旧版浏览器,具体取决于所使用的 HTML(如果您:hover在链接上使用它总是可以的)。

事件冒泡将比多个事件处理程序实例执行得更好。 http://icant.co.uk/sandbox/eventdelegation/

您永远不应该使用悬停来展开/折叠新内容,但是,这是无法访问的,展开/折叠应该始终由链接元素上的点击事件触发(顺便说一下,这听起来不像您)。

于 2012-09-26T09:49:44.837 回答