【问题标题】:What event to use instead of onmouseout to run when mouse is not over the element?当鼠标不在元素上时,使用什么事件而不是 onmouseout 来运行?
【发布时间】:2012-11-01 19:36:49
【问题描述】:

我想在不悬停元素时运行脚本。这是某种取消激活之前在“onmouseover”事件中运行的其他东西。 所以我使用 onmouseout 事件来运行这个脚本,但是,问题是如果我不悬停元素然后离开它,脚本就不会运行。 如果将元素悬停得太快或窗口失去焦点,就会发生这种情况。 我该如何解决?

编辑: 让我用另一种方式来说明这一点,我需要的是在鼠标未触摸元素时运行的事件。

【问题讨论】:

  • 如果鼠标移动得太快,则无法检测到悬停,除非您手动跟踪鼠标移动并自己触发所有悬停。然后您可以添加线性插值来检查帧之间的鼠标光标移动并计算所有 onMouseX 事件。
  • 好吧,也许我不想在这里检测悬停,我想检查鼠标是否悬停
  • 如果onMouseOut由于快速移动而丢失,那么onMouseOver也会丢失,因此您可以正确跟踪您的状态。
  • 您可能还想在脚本加载时运行在 onMouseOut 上运行的相同脚本。
  • 对,但这里发生的情况是我正常输入元素但离开它们非常快..

标签: javascript onmouseover onmouseout


【解决方案1】:

你可以试试这个,

<div id="div1" onmouseover="fucntionIn()" onmouseout="functionOut()">"Special Area"</div>
<div id="div2" onmouseover="fucntionOut()">Other area</div>

逻辑是为页面其他区域的onmouseover事件编写停用代码。

【讨论】:

  • 我喜欢你的逻辑,但是,必须为运行了激活代码的元素运行停用代码。
  • hmmm.... 那么当你停用一个元素时,你必须设置一个属性。然后使用 document.getElementById() 选择元素。并检查是否使用该属性激活。如果已激活,请停用它。
  • “检查是否激活”在什么情况下?
  • 您可以使用 Jquery 轻松完成这类事情。看一下这个。 api.jquery.com/attr/#attr2
  • 我已经在此处编写了示例代码 (jsfiddle.net/XGunn)。它对你有用吗?
【解决方案2】:

如果你在整个页面上检测到onmouseover(通过事件冒泡),当它进入一个新元素时,你最后观察到的原始元素是否是当前目标元素的父元素,如果不是那么你知道它退出了原来的 DOM 节点,即使 onmouseout 没有触发。

【讨论】:

  • 我认为浏览器不会忘记在onmouseover 被触发后触发onmouseout 事件
  • @JanDvorak 虽然我想这样想,但我看到在涉及更改 DOM 时类似的期望破灭了。虽然这似乎不是这里的情况,但应该注意的是,这样的假设并不总是有效的(参见stackoverflow.com/questions/2732818/…
  • 有趣的链接。我不应该对 IE 做错了什么感到惊讶 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2014-08-23
  • 2014-08-13
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多