Хотя вы можете использовать метод jQuery off()
, который позволяет вам фактически удалить слушателя, вам нужно сохранить ссылку на эту функцию, чтобы off () удаляла только этого слушателя. В противном случае вам придется позвонить .off("mousemove")
. При вызове без ссылки на функцию он удалит всех слушателей. Это может вызвать проблемы, если какой-то другой код должен добавить то же событие.
Вместо этого вы можете настроить перемещение мыши, как и другие. А затем используйте флаг, который вы установили в mouseenter и сбросили в mouseleave. Проверьте этот флаг в вашем обратном вызове mousemove, немедленно выйдя, если он будет проверен как false
var enableMove = false;
$(document).mousemove(function(e) {
if(!enableMove) return;
$('.case-study #scene').offset({
left: e.pageX + 70,
top: e.pageY + 70
});
});
$( ".homehero" ).mouseleave(function() {
enableMove = false;
$( "#scene" ).addClass( "hide-hero" );
});
$( ".homehero" ).mouseenter(function() {
enableMove = false;
$( "#scene" ).removeClass( "hide-hero" );
});
Что касается проблемы с позиционированием, вы можете просто сохранить координаты элемента при наведении мыши и использовать эти сохраненные данные для установки координат при выходе. Вы можете использовать метод jQuery data () , чтобы сохранить информацию о самом элементе и получить ее позже.
//in mouseenter
var $element = $('.case-study #scene');
$element.data("originalCoordinates",$element.offset());
//in mouseleave
var $element = $('.case-study #scene');
$element.offset( $element.data("originalCoordinates") );