#javascript #html #jquery #css
Вопрос:
У меня есть элемент курсора, который следует за позициями мыши X и Y. Но как только он наведет курсор на текстовый элемент меню, я хочу, чтобы этот последователь курсора изменился в размере и положении.
Размер = к ширине и высоте смещения зависающего текста позиция = оставаться на смещении Y и X этого зависающего текста и только во время зависания.
До сих пор у меня это есть, но я считаю, что это не работает. Есть какие-нибудь предложения о том, как мне следует продолжать? спасибо за ваши добрые слова!
let cursor = document.querySelector('.cursorFollower');
let button = document.querySelector('.superText');
let buttonWidth = button.offsetWidth;
let buttonHeight = button.offsetHeight;
let buttonX = button.offsetLeft;
let buttonY = button.offsetTop;
document.addEventListener('mousemove',(e)=>{
cursor.style.left = e.pageX - 10 'px';
cursor.style.top = e.pageY - 10 'px';
});
button.onmouseover = function(){
button.setAttribute("style", "color: #84C4B5;");
cursor.style.transform = 'rotate(0deg)';
cursor.style.width = buttonWidth 'px';
cursor.style.height = buttonHeight 'px';
cursor.style.top = buttonY 'px';
};
button.onmouseout = function(){
button.setAttribute("style", "color: white;");
cursor.style.transform = 'rotate(45deg)';
cursor.style.width = '20px';
cursor.style.height = '20px';
};
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width:100%;
height: 100vh;
background-color: #0A193E;
color: white;
font-family: sans-serif;
font-size: 20px;
}
.superText {
padding: 10px 20px;
cursor: none;
transition: all 0.2s ease;
}
.cursorFollower {
width: 20px;
height: 20px;
position: absolute;
border: 1px solid white;
transition: all 0.2s ease-out;
pointer-events: none;
transform: rotate(45deg);
}
<div class="container">
<p class="superText">Hello World!</p>
</div>
<div class="cursorFollower"></div>
Комментарии:
1. Ну, это наверняка не сработает , если вы произвольно переключитесь с правильного написания имени метода,
setAttribute
, на несуществующееSetAttribute
.2. хорошая мысль @CBroe, но я обновил ее в своем коде и все еще не работаю. Может быть, я делаю что-то еще не так?
3. Должно ли это быть
cursor.setAttribute("left",buttonX);
для того, чтобыcursor.setAttribute("style", "left: " buttonX);
?4. спасибо @Shuvo, но не повезло
5. Я отредактировал фрагмент @MrOutadi, но не могу изменить расположение курсора (я хочу, чтобы он сохранял те же X и Y текста при наведении курсора поверх текста. этот способ статичен при наведении указателя мыши на этот текст/кнопку?
Ответ №1:
- Ваша первая проблема заключалась в том, что вы использовали
SetAttribute
то, что является ложным, и вы должны использоватьsetAttribute
. (просто займитесь кейсом для верблюдов!) - И второе, чего вы не заметили, это то , что
left
,top
,width
,height
не являются атрибутами элемента. они предназначены дляstyle
атрибута!
поэтому, пожалуйста, используйте этот код:
button.onmouseover = function (e) {
cursor.setAttribute("style", `left: ${buttonX}, top: ${buttonY}, width: ${buttonWidth}, height: ${buttonHeight}`);
};
Комментарии:
1. спасибо @MrOutadi, но по какой-то причине после обновления этой строки она все еще не работает
2. Привет @MrOutadi! наконец-то это сработало (частично) Я, наконец, сделал div того же размера, что и кнопка, но я не могу заставить его оставаться в том же положении (x и y), что и кнопка, при наведении курсора на верхнюю часть кнопки. нравится становиться границей кнопки, когда вы зависаете над ней. и только после того, как курсор будет удален от кнопки, чтобы сохранить его фактические x и y?
3. @Eugenio, подождите, я только что исправил ошибку при наведении, я прочитал этот комментарий сейчас, поэтому я собираюсь исправить щелчок 🙂
4. спасибо @MrOutadi :)! Я немного обновил фрагмент. Я знаю, что проблема связана с позиционированием курсора на основе клиента X и Y, поэтому я пытаюсь реализовать оператор if, проверяющий смещение Y и X по сравнению с кнопкой X и Y, чтобы разрешить это движение или поместить его поверх кнопки x и y в случае, если он касается кнопки. Немного сложный, не эксперт в этом, ха-ха
5. @Eugenio не могли бы вы, пожалуйста, взглянуть на это: codesandbox.io/s/onmouseover-or-onmouseenter-n4neo