我有一些像这样的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;
}
}
答案 0 :(得分:8)
这是因为您将克隆的项目插入.hoverWrapper
之外。移动鼠标的瞬间,脚本会检测到您不再悬停在鼠标上,因此它会删除克隆。然后它会检测到你再次悬停,然后再次插入,然后再次检测,依此类推。
您所要做的就是在包装器中插入克隆。
hoveredItem.before(cloneItem);
//change to this line
hoveredItem.append(cloneItem);
答案 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);
});
});