jQuery悬停克隆项目

时间:2013-11-05 14:10:58

标签: javascript jquery html css jquery-hover

我有一些像这样的HTML结构:

<div id="mobileWrapper" class="ios">
    <div class="hoverWrapper">
        <div class="acvCouponPreviewWrap clearfix">
            <div class="previewLeft">
                 <span class="previewLeftInner"> 10% </span>
            </div>
            <div class="previewRight">
                 <span class="previewUser"> Some Text here </span>
            </div>
        </div>
        <!-- clone will placed here -->
    </div>
    <div class="hoverWrapper">
        <div class="acvCouponPreviewWrap clearfix">
            ...
        </div>
        <!-- clone will placed here -->
    </div>
    <div class="hoverWrapper">
        <div class="acvCouponPreviewWrap clearfix">
            ...
        </div>
        <!-- clone will placed here -->
    </div>
</div>

现在,当我徘徊.hoverWrapper物品时,我想要克隆悬停的物品并将其放置在悬停物品上方。好的,到目前为止这是有效的。这里的问题是悬停时的闪烁效果。一些帮助将是优雅的!

http://jsbin.com/oJeDUmU/2/edit

我试过了,但不是我想要的:

if ($(this).parent().find('.hoverWrapper')) {
    if ($(this).find('.previewActive')) {
        return false;
   }
}            

2 个答案:

答案 0 :(得分:8)

这是因为您将克隆的项目插入.hoverWrapper之外。移动鼠标的瞬间,脚本会检测到您不再悬停在鼠标上,因此它会删除克隆。然后它会检测到你再次悬停,然后再次插入,然后再次检测,依此类推。

您所要做的就是在包装器中插入克隆。

hoveredItem.before(cloneItem);
//change to this line
hoveredItem.append(cloneItem);

http://jsbin.com/oJeDUmU/4/edit

答案 1 :(得分:1)

闪烁的原因是,只要显示克隆的项目,就会将鼠标悬停在原始项目之外。然后克隆消失了,你再次徘徊。

您可以通过更改代码来解决此问题,以便mouseenter原始元素,但mouseleave克隆:

$(document).ready(function () {

    $("div.hoverWrapper").on('mouseenter', function () {
        console.log('enter');
        var hoveredItem = $(this);
        var position = hoveredItem.offset().top - $('#mobileWrapper').offset().top - hoveredItem.height() / 2;

        var cloneItem = $(this)
            .clone()
            .addClass('previewActive')
            .css('top', position)
            .css('left', '-34px')
            .on('mouseleave', function () {
                console.log('leave');
                $(this).fadeOut(300, function () {
                    $(this).remove();
                });
                $(this).remove();
            });
        $('#mobileWrapper').find('.previewActive').remove(); // remove other boxes
        hoveredItem.before(cloneItem);
    });

});

http://jsbin.com/oJeDUmU/16/edit