Я бы хотел заменить курсор мыши на моем веб-сайте собственным, состоящим из двух элементов:
- курсор;
- тропа, которая следует за курсором и отстает от него.
Сделать это с помощью jquery очень просто.
1) Вы скрываете курсор по умолчанию в CSS:
html, body {cursor:none;}
2) Вы создаете два разных div (один для самого курсора и один для следа) и стилизуете их:
<div id="mouse_cursor" class="mouse_cursor"></div>
<div id="mouse_trail" class="mouse_trail"></div>
3) Вы создаете логику для каждого из них:
function moveCursor(e) {
$('#mouse_cursor').css({'left' : e.pageX,'top' : e.pageY });
}
$(window).on('mousemove', moveCursor);
function moveTrail(e) {
TweenMax.to('#mouse_trail', 0.35, {
css: {left: e.pageX,top: e.pageY},
ease:SlowMo.easeIn
}
)};
$(window).on('mousemove', moveTrail);
(В моем случае эффект следа создается с помощью GSAP от Greensock).
Теперь ... это прекрасно работает, пока стиль курсора не изменился. Вот скрипка, для вашей справки: https://jsfiddle.net/collederfomento/jvy1zfg8/27/
Я бы хотел изменить стиль курсора, как только он наведет определенные элементы, и вот тут я столкнулся с несколькими проблемами.
Я попытался сделать следующее:
1) Создайте функцию, связанную с событиями mouseenter \ mouseover, которая добавляет класс к курсору, если он наводит курсор на элемент:
$(".hover").bind( "mouseenter mouseover", function() {
$("#mouse_cursor").addClass("mouse_cursor_hover");
});
2) ... а затем вторая функция, которая удаляет класс, когда курсор больше не наводит элемент:
$(".hover").mouseleave(function() {
$("#mouse_cursor").removeClass("mouse_cursor_hover");
});
3) И наконец, конечно, я добавил стиль для курсора "hover":
.mouse_cursor_hover {width:300px;height:300px;}
Как вы можете видеть в этой скрипке (https://jsfiddle.net/collederfomento/z4e1qjbc/13/), событие hover не срабатывает должным образом, и курсор мыши мигает.
Я испробовал несколько других подходов (используя прослушиватель событий Javascript вместо вышеупомянутых функций, используя свойство css вместо переключения класса и т. Д.), Но все они ведут себя одинаково.
Что любопытно, так это то, что если я уберу функции, которые заставляют курсоры двигаться, то событие hover обрабатывается без ошибок. Я полагаю, что сочетание этих двух функций вызывает проблему, но я понятия не имею, почему (или как ее решить).