【发布时间】:2011-04-10 19:28:01
【问题描述】:
在我使用的库中,我的任务是将元素悬停在 dom 的前面。 (我把它放大了,所以我需要看到它,然后在鼠标移开时将它缩小)。
我正在使用的库有一个简洁的解决方案,它在活动元素上使用 appendChildren 将其移动到其父元素的末尾,从而进一步靠近 dom 的末尾并依次位于顶部。
问题是我相信因为你正在移动的元素是你悬停在mouseout事件上的元素丢失了。您的鼠标仍在节点上,但 mouseout 事件没有被触发。
我已删除功能以确认问题。它在 Firefox 中运行良好,但在任何版本的 IE 中都无法运行。我在这里使用 jQuery 来提高速度。解决方案可以是简单的旧 Javascript,这将是一个偏好,因为它可能需要备份。
我不能在这里使用 z-index,因为元素是 vml,库是 Raphael,我正在使用 toFront 调用。使用 ul/li 的示例在一个简单的示例中显示问题
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="js/jquery.min.js" type="text/javascript"></script>
<style>
li
{
border:1px solid black;
}
</style>
</head>
<body>
<ul><li>Test 1</li></ul>
<ul><li>Test 2</li></ul>
<ul><li>Test 3</li></ul>
<ul><li>Test 4</li></ul>
<script>
$(function(){
$("li").mouseover(function(){
$(this).css("border-color","red");
this.parentNode.appendChild(this);
});
$("li").mouseout(function(){
$(this).css("border-color","black");
});
});
</script>
</body>
</html>
编辑:这是一个 js 粘贴箱的链接,可以查看它的运行情况。 http://jsbin.com/obesa4
**编辑 2:** 在发布更多信息之前,请查看所有答案的所有 cmets。
【问题讨论】:
-
我无法理解您的帖子。您希望在鼠标仍在元素上方时触发
mouseout事件吗?你的实际问题是什么? -
而对于 this.parentNode.appendChild(this);,您要重新添加现有的 LI 元素吗?为什么不直接添加一个 CSS 类而不是使用新的 CSS 添加/删除相同的元素?或者您的原始代码是否涉及从 UL 内部的其他地方添加一个全新的元素来模仿您在开始时提到的“扩展”尺寸效果?
-
Linkol 我正在尝试让示例代码在 ie 中工作,就像在 Firefox 中一样。 mouseout 事件不会触发。我以 li 元素为例。正如我在帖子中所说的,这些元素实际上是 VML 元素。所以像 z-index 或添加类这样的东西是行不通的,除非人们能证明自己与众不同。
-
哦,问题/问题是帖子的标题!
-
我正在为这个问题添加赏金。我通过在 Internet Explorer 中监视鼠标的位置并在鼠标移出该区域时重置悬停来解决了这个问题。基本上重新发明了鼠标输入/输出功能。它有效,但我更愿意找到一个更好的例子。
标签: javascript mouseevent raphael jquery-events mouseout