我正在尝试使用jQuery创建一个简单的动画,它在Firefox中运行得非常好,但它在Chrome和Edge中闪烁,这里是jsfiddle,这里是代码:
HTML
<div id="boxes-wrapper">
<div class="box"></div><div class="box"></div><div class="box"></div>
</div>
CSS
.box {
width: 150px;
height: 150px;
display: inline-block;
margin: 0;
padding: 0;
vertical-align: top;
}
.box:first-child {
background: pink;
}
.box:nth-child(2) {
background: skyblue;
}
.box:nth-child(3) {
background: gold;
}
.box.hover {
position: relative;
z-index: 20;
}
html, body {
position: relative;
width: 100%;
height: 100%;
}
#shadow {
display: none;
position: absolute;
left: 0;
top: 0;
background: black;
opacity: 0.7;
z-index: 10;
width: 100%;
height: 100%;
}
的JavaScript
$('.box').hover(function() {
$(this).addClass('hover');
$('#shadow').show();
}, function() {
$(this).removeClass('hover');
$('#shadow').hide();
});
我在SO上挖了几个问题,但没有人回答如何摆脱闪烁。
答案 0 :(得分:2)
好的,问题是你的叠加层覆盖了非悬停的盒子,所以它当前需要消失才能悬停其他盒子。
闪光灯是由您的盒子之间的空间引起的 - 只要鼠标离开,叠加层就会被隐藏。
为了解决这个问题,你需要混合使用css并将覆盖的悬停移动到盒子包装器(代码中的注释):
// remove overlay from this:
$('.box').hover(function() {
$(this).addClass('hover');
}, function() {
$(this).removeClass('hover');
});
// add this:
$('#boxes-wrapper').hover(function() {
$('#shadow').show();
}, function() {
$('#shadow').hide();
});
&#13;
html,
body {
position: relative;
width: 100%;
height: 100%;
}
#boxes-wrapper {
float: left;
/*this makes the wrapper the same width as the boxes, you may need to add a clear fix after this*/
}
.box {
width: 150px;
height: 150px;
display: inline-block;
margin: 0;
padding: 0;
vertical-align: top;
}
.box:first-child {
background: pink;
}
.box:nth-child(2) {
background: skyblue;
}
.box:nth-child(3) {
background: gold;
}
.box.hover {
position: relative;
z-index: 20;
}
#shadow {
display: none;
position: absolute;
left: 0;
top: 0;
background: black;
opacity: 0.7;
z-index: 10;
width: 100%;
height: 100%;
/* add the following - means that the mouse hover will "go through" the overlay */
pointer-events: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="boxes-wrapper">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div id="shadow"></div>
&#13;