- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑一个简单的元素及其关联的 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
编辑。如果用户只是单击而不移动鼠标,工具提示将保持显示状态,这是一个真正的问题。如何检测元素是否消失?
最佳答案
The principle is straightforward: while the element is hovered, it must go down. The problem is, when the mouse doesn't move, that the :hover state is maintained even if the element is not physically below the mouse anymore (due to the translation). The state seems to be updated only after an mouse move.
So here are my questions:
- Is this behaviour normal (compliant with the norms)?
是的。这种行为是正常的。虽然标准中没有逐字规定,但在这里详细提到: http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
以这个 fiddle 为引用:http://jsfiddle.net/Blackhole/h7tb9/3/
上面的 div
直接绑定(bind)了鼠标事件。下方的 div
将鼠标事件绑定(bind)到其父级。拿起下面的那个。在一侧缓慢移动鼠标并观察控制台,看看会发生什么。
mouseover
和 mouseenter
会快速连续触发(悬停)。div
进行了翻译。div
内。 mousemove
触发,内部 div
仍被翻译。mouseout
和 mouseleave
快速连续触发,内部 div
转换回其原始位置。这在此处描述: http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-mouseevents 在 鼠标事件顺序 部分下。
上面的第 3 步很重要。因为你什么都不做,所以没有事件被触发,因此什么也没有发生。如果内部 div
在此步骤中弹回其原始位置,则意味着在没有任何事件的情况下发生了激活!
这符合event作为本节文档的定义:http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#glossary-event说:
An event is the representation of some occurrence (such as a mouse click on the presentation of an element, the removal of child node from an element, or any number of other possibilities) which is associated with its event target. Each event is an instantiation of one specific event type.
现在看看这里的文档: http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#event-flow ,就在 3.2 节 开始之前,它说:
After an event completes all the phases of its propagation path, its Event.currentTarget must be set to null and the Event.eventPhase must be set to 0 (NONE). All other attributes of the Event (or interface derived from Event) are unchanged (including the Event.target attribute, which must continue to reference the event target).
最后一行(括号内)很重要。即使在事件完成后,event.target 仍会继续引用事件目标。
现在选择 fiddle 中上方的 div
作为引用。在 mouseenter
上,div
本身被翻译。 它是否从鼠标指针下方移开并不重要。 event.target 仍然引用它,如果没有其他鼠标事件发生,则什么也不会发生,它会保持翻译状态。当您移动鼠标(向内或向外的任意位置)时,激活发生在 event.target(仍然是这个 div
)并且现在用户代理发现鼠标指针不再位于元素上 并立即触发 mouseout
和 mouseleave
事件(当然是在触发 mousemove
之后) 导致 div
转换回来。
2.What are the solutions to avoid this problem?
Edit : To give you a context, here is what I want to do concretely: with JavaScript, I display a tooltip when the mouse is on an element (and hide it when the mouse leaves it). But the same element can be transform-ed when the user click on it. If the user simply clicks without moving the mouse, the tooltip will remain displayed, which is a real problem. How can I detect that the element is gone?
如果您查看此 fiddle 中较低的 div
中的实现:http://jsfiddle.net/abhitalks/h7tb9/2/ ;与上部 div 相比,鼠标悬停时没有颤动/抖动。这是因为事件不是在 div
本身,而是在父级上处理。
因此,这可能是您的用例的一种解决方案。
查看此演示:http://jsfiddle.net/Blackhole/nR8t9/9/
这解决了您的编辑问题。工具提示显示在 mouseover
上。工具提示在 mouseleave
上隐藏。当您单击
时,可以转换相同的元素。如果您只是简单地单击
而不移动鼠标,则工具提示会隐藏。
在这里,如果您单击
,该元素将被翻译,然后不会发生进一步的悬停
操作。工具提示本身是使用 :before
伪元素实现的。这将工具提示和您要在 click
后更改的元素分开。您仍然处理元素本身的事件。不需要超时,因为它由 css 本身处理。如果您mouseout
,工具提示将在延迟后隐藏。
希望对您有所帮助。
关于javascript - 即使元素已经消失,悬停状态也会在过渡期间保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23445468/
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
在cgi服务器中,我这样返回 print ('Status: 201 Created') print ('Content-Type: text/html') print ('Location: htt
我正在查看 esh(easy shell)的实现,无法理解在这种情况下什么是 22 和 9 信号。理想情况下,有一个更具描述性的常量,但我找不到列表。 最佳答案 信号列表及其编号(包括您看到的这两个)
我的Oozie Hive Action 永远处于运行模式。 oozie.log文件中没有显示错误。
我正在编写一个使用 RFCOMM 通过蓝牙连接到设备的 Android 应用程序。我使用 BluetoothChat 示例作为建立连接的基础,大部分时间一切正常。 但是,有时由于出现套接字已打开的消息
我有一个云调度程序作业,它应该每小时访问我的 API 以更新一些价格。这些作业大约需要 80 秒才能运行。 这是它的作用: POST https://www.example.com/api/jobs/
我正在 Tomcat 上访问一个简单的 JSP 页面: 但是当我使用 curl 测试此页面时,我得到了 200 响应代码而不是预期的 202: $ curl -i "http://localhos
有时 JAR-RS 客户端会发送错误的语法请求正文。服务器应响应 HTTP status 400 (Bad Request) , 但它以 HTTP status 500 (Internal Serve
我正在尝试通过 response.send() 发送一个整数,但我不断收到此错误 express deprecated res.send(status): Use res.sendStatus(sta
我已经用 Excel 和 Java 做过很多次了……这次我需要用 Stata 来做,因为保存变量更方便'labels .如何将 dataset_1 重组为下面的 dataset_2? 我需要转换以下
我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。 帮助台应用程序,其中创建作业并通过以下工作流程移动: 新 - 工作已创建但未分配 进行中 - 分配给工作人
我想在 Keras 中运行 LSTM 并获得输出和状态。在 TF 中有这样的事情 with tf.variable_scope("RNN"): for time_step in range
有谁知道 Scala-GWT 的当前状态 项目? 那里的主要作者 Grzegorz Kossakowski 似乎退出了这个项目,在 Spring 中从事 scalac 的工作。 但是,在 interv
我正在尝试编写一个 super 简单的 applescript 来启动 OneDrive App , 或确保打开,当机器的电源设置为插入时,将退出,或确保关闭,当电源设置为电池时。 我无法找到如何访问
目前我正在做这样的事情 link.on('click', function () { if (link.attr('href') !== $route.current.originalPath
是否可以仅通过查看用户代理来检测浏览器上是否启用/禁用 Javascript。 如果是,我应该寻找什么。如果否,检测用户浏览器是否启用/禁用 JavaScript 的最佳方法是什么 最佳答案 不,没有
Spring 和 OSGi 目前的开发状况如何? 最近好像有点安静了。 文档的最新版本 ( http://docs.spring.io/osgi/ ) 来自 2009 年。 我看到一些声明 Sprin
我正在从主函数为此类创建一个线程,但即使使用 Thread.currentThread().interrupt() 中断它,输出仍然包含“Still Here”行。 public class Writ
为了满足并发要求,我想知道如何在 Godog 中的多个步骤之间传递参数或状态。 func FeatureContext(s *godog.Suite) { // This step is ca
我有一个UIButton子类,它不使用UIImage背景,仅使用背景色。我注意到的一件事是,当您设置按钮的背景图像时,有一个默认的突出显示状态,当按下按钮时,该按钮会稍微变暗。 这是我当前的代码。
我是一名优秀的程序员,十分优秀!