jQuery悬停()不适用于绝对定位的元素和动画

发布于 2024-07-16 08:27:45 字数 798 浏览 9 评论 0原文

我有一些看起来像这样的 html:

<a href="#" class="move"><span class="text">add</span><span class="icon-arrow"></span></a>

我在锚标记上注册了一个 jquery 事件:

$('a.move').hover(
    function (event) {
        $(this).children('span.text').toggle();
        $(this).animate({right: '5px'}, 'fast');
    },
    function (event) {
        $(this).children('span.text').toggle();
        $(this).animate({right: '0px'}, 'fast');
    }
);

当我将鼠标悬停在锚标记上时,它会显示 span.text 并将锚点向右移动 5px。

现在,由于我不想陷入的复杂性,我必须设置position:relative; 并绝对定位图标和文本,使图标出现在左侧,文本出现在右侧。

问题:

当我将鼠标悬停在锚标记上时,图标向右移动,并且鼠标最终位于文本(出现的)上方。 不幸的是,如果我将鼠标从图标移动到文本,并且动画开始疯狂循环,则会调用“out”函数。 我不明白是什么导致“out”事件触发,因为鼠标永远不会离开锚标记。

谢谢!

I have some html that looks like this:

<a href="#" class="move"><span class="text">add</span><span class="icon-arrow"></span></a>

And I have a jquery event registered on the anchor tag:

$('a.move').hover(
    function (event) {
        $(this).children('span.text').toggle();
        $(this).animate({right: '5px'}, 'fast');
    },
    function (event) {
        $(this).children('span.text').toggle();
        $(this).animate({right: '0px'}, 'fast');
    }
);

When I mouse over the anchor tag, it displays the span.text and moves the anchor 5px to the right.

Now, due to complications that I don't feel like getting into, I have to set position: relative; on the container and absolutely position the icon and the text so that the icon appears on the left and the text on the right.

THE PROBLEM:

When I mouse over the anchor tag, the icon moves right, and the mouse ends up over top of the text (which appears). Unfortunately, the 'out' function gets called if I move my mouse from the icon to the text and the animation starts looping like crazy. I don't understand what's causing the "out" event to fire, as the mouse is never leaving the anchor tag.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鲜血染红嫁衣 2024-07-23 08:27:45

您可以使用“mouseenter”和“mouseleave”事件代替悬停,当子元素妨碍时,这些事件不会触发:

$('a.move').bind('mouseenter', function (e) {
  $(this).children('span.text').toggle();
  $(this).animate({right: '5px'}, 'fast');
})
.bind('mouseleave', function (e) {
  $(this).children('span.text').toggle();
  $(this).animate({right: '0px'}, 'fast');
});

Instead of hover you can use the "mouseenter" and "mouseleave" events, which do not fire when child elements get in the way:

$('a.move').bind('mouseenter', function (e) {
  $(this).children('span.text').toggle();
  $(this).animate({right: '5px'}, 'fast');
})
.bind('mouseleave', function (e) {
  $(this).children('span.text').toggle();
  $(this).animate({right: '0px'}, 'fast');
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文