【发布时间】:2014-06-20 03:51:35
【问题描述】:
考虑一个简单的元素及其关联的 CSS:
<div id="content">Hover me !</div>
#content {
width: 100px;
height: 100px;
}
#content:hover {
transform: translateY(500px);
transition: transform 1s 500ms;
}
原理很简单:当元素悬停时,它必须向下。问题是,当鼠标不移动时,即使元素不再位于鼠标下方(由于翻译),:hover 状态也会保持不变。状态似乎只有在鼠标移动后才会更新。
注意光标(指针)及其与元素的相对位置!
只有当鼠标在元素上时才必须执行 JavaScript 函数,这是一个真正的问题,在 timeout 之后:
// The mouseleave event will not be called during the transition,
// unless the mouse move !
element.on('mouseenter', executeAfterTimeout);
element.on('mouseleave', cancelTimeout);
所以这是我的问题:
- 这种行为是否正常(符合规范)?
- 有哪些解决方案可以避免这个问题?
编辑:为了给你一个上下文,这是我想要做的具体事情:使用 JavaScript,当鼠标在一个元素上时我会显示一个工具提示(并且当鼠标离开它时隐藏它)。但是当用户点击它时,相同的元素可以是transform-ed。如果用户只是单击而不移动鼠标,则工具提示将保持显示,这是一个真正的问题。如何检测元素已消失?
【问题讨论】:
-
这种行为在某种程度上是正常的,元素仍在使用您指向的房间,但通过翻译将其拉低。您可以用相对 nd 坐标来尝试相同的有趣行为,而不是 translate。
-
@GCyrillus 你有规范文件的链接吗?
-
来自这样的在线编辑器:jsfiddle.net 或 codepen.io/pen
-
嗯,我发现的唯一规范文件是:w3.org/TR/CSS2/selector.html#dynamic-pseudo-classes。它只说明了悬停的激活:“当用户指定一个元素(使用一些指针设备)时应用 :hover 伪类”,因此很明显悬停只能通过鼠标移动而不是通过鼠标移动激活翻译。可能停用也是这样实现的
-
根据标准,该行为似乎是正常的。你到底需要完成什么?
标签: javascript css hover css-transitions css-transforms