Существует не проблема, а логическое поведение: когда вы наводите курсор на синий div, вы запускаете mouseenter
, поэтому вы удаляете класс и видите красный, НО, когда вы наводите красный, который вы вызываете mouseleave
из синего цвета.div, таким образом, вы добавляете класс и скрываете красный.Теперь красный скрыт, вы снова запускаете mouseenter
на синем div, и вы снова удаляете класс, и красный div показывается, и так далее ... это мерцание.
Чтобы этого избежать, выможно рассмотреть наведение на красное поле, чтобы оно отображалось на красном поле, когда вы теряете наведение из синего.
$(document).ready(function() {
$("#backgroundiv").hover(function() {
$("#newdot").removeClass("hide");
}, function() {
$("#newdot").addClass("hide");
});
});
//div follows the cursor
$("#backgroundiv").on('mousemove', function(e) {
//below centres the div
var newdotwidth = $("#newdot").width() / 2;
$('#newdot').css({
left: e.pageX - newdotwidth,
top: e.pageY - newdotwidth
});
});
#backgroundiv {
width: 400px;
height: 400px;
background-color: blue;
z-index: 1;
}
#newdot {
width: 40px;
height: 40px;
background-color: red;
position: absolute;
z-index: 2;
}
.hide {
display: none;
}
/* Added this code */
#newdot:hover {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="newdot">
</div>
<div id="backgroundiv">
</div>