问题是因为你在使用
next()
find()
请注意,在下面的示例中,我还向
stop()
这样就避免了在DOM更新时多次调用事件时发生的闪烁。
$(".card-text").on('mouseenter', function() {
$(this).find('.foreground').stop(true).fadeOut();
$(this).find('.background').stop(true).fadeIn();
});
$(".card-text").on('mouseleave', function() {
$(this).find('.foreground').stop(true).fadeIn();
$(this).find('.background').stop(true).fadeOut();
});
.background { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="card-text">
<div class="foreground">
<p>MyTitle 1</p>
<p>Bla bla bla 1</p>
</div>
<div class="background">
<p>Hoveerr 1</p>
</div>
</div>
<div style="background-color: black; padding: 5px;"></div>
<div class="card-text">
<div class="foreground">
<p>MyTitle2 </p>
<p>Bla bla bla 2</p>
</div>
<div class="background">
<p>Hoveerr 2</p>
</div>
</div>
值得注意的是,您应该尽可能使用CSS,因为它的性能比JS好得多。要做到这一点,你可以钩
:hover
国家对
.card-text
和
transition
基于子元素的
opacity
. 试试这个:
.card-text {
display: grid;
}
.card-text div {
transition: opacity 0.4s;
grid-column: 1;
grid-row: 1;
}
.foreground { opacity: 1; }
.background { opacity: 0; }
.card-text:hover .foreground { opacity: 0; }
.card-text:hover .background { opacity: 1; }
<div class="card-text">
<div class="foreground">
<p>MyTitle 1</p>
<p>Bla bla bla 1</p>
</div>
<div class="background">
<p>Hoveerr 1</p>
</div>
</div>
<div style="background-color: black; padding: 5px;"></div>
<div class="card-text">
<div class="foreground">
<p>MyTitle2 </p>
<p>Bla bla bla 2</p>
</div>
<div class="background">
<p>Hoveerr 2</p>
</div>
</div>