jQuery .hover()在悬停在新元素上后触发旧元素

时间:2015-04-30 12:22:36

标签: jquery hover slide effects

我有一个div,其中嵌有两个标签,这些标签是指向其他页面的链接,并且是另一个旁边的标签。

我正在将幻灯片应用于第三个div,它在悬停时位于标签下方。

我遇到的问题是,如果我将鼠标悬停在其中一个标签上,然后从中移除鼠标但不移动到下一个标签,效果会正常。

如果我直接从标签移动到另一个标签,则隐藏div的效果会在第一个悬停的标签上发生,而不是当前标签。

HTML:

<div class="top">
<label class="head left" id="home">Welcome - <?php echo $_SESSION['description'] . " (" . $_SESSION['lid'] . ")"; ?>
</label>
<label id="logout" class="head right">Logout</label>

jQuery代码:

// Slide in effect for hover on class=head labels
        $("#home, #logout").hover(function () {
            // Set width to hovering element width:
            $(".labelunderscore").css("width", $(this).width() + 20);
            // Set position on labelunderscore to current element left value
            $(".labelunderscore").css("left", $(this).offset().left);
            // Check where are we hovering. Left side slide from left right from right
            if ($(this).offset().left > $(window).width()/2) {
                // We are on the right side
                $('.labelunderscore').show('slide', {direction: 'right'}, 200);
            } else {
                // Left side
                $('.labelunderscore').show('slide', {direction: 'left'}, 200);
            }
        }).mouseout(function () {
            $('.labelunderscore').hide('slide', {direction: 'left'}, 200);
        })

2 个答案:

答案 0 :(得分:0)

只需将鼠标悬停在标签的父级上,这样就不会将它们视为mousein / out的两个独立元素:

e.g。

$(".top").hover(function () {

JSFiddle: http://jsfiddle.net/TrueBlueAussie/rto2hz5k/6/

答案 1 :(得分:0)

找到解决方案。问题是在页面中创建的labelunderscore div。这会“混淆”jquery库,因为在应用幻灯片时,它必须在同一个div上应用滑动效果

通过在运行时在函数中创建labelunderscore div并根据hovered元素的id为其分配唯一ID,对问题进行了排序。代码如下:

// Slide in effect for hover on class=head labels
        $(".head").hover(function () {
            //alert($(this).attr('id'))
            $('#main').append('<div id="labelunderscore_' + $(this).attr("id") + '" class="labelunderscore"></div>');
            // Set width to hovering element width:
            $('#labelunderscore_' + $(this).attr("id")).css("width", $(this).width() + 20);
            // Set position on labelunderscore to current element left value
            $('#labelunderscore_' + $(this).attr("id")).css("left", $(this).offset().left);
            // Check where are we hovering. Left side slide from left right from right
            if ($(this).offset().left > $(window).width()/2) {
                // We are on the right side
                $('#labelunderscore_' + $(this).attr("id")).show('slide', {direction: 'right'}, 200);
            } else {
                // Left side
                $('#labelunderscore_' + $(this).attr("id") ).show('slide', {direction: 'left'}, 200);
            }
        }, function () {
            $('#labelunderscore_' + $(this).attr("id")).hide('slide', {direction: 'left'}, 200);
        })