У меня есть два DIV различной ширины друг на друга.Верхний DIV displayDIV
шире нижнего DIV captureDIV
.
. В displayDIV
я рисую точку, положение X которой пропорционально положению мыши в пределах captureDIV
.
Когда вы перемещаете мышь в captureDIV
, точка перемещается пропорционально в DisplayDIV
.
Это имеет гораздо больше смысла, если вы посмотрите на эту скрипку
Мой код выглядит следующим образом ...
let capture = document.getElementById('captureDIV');
let display = document.getElementById('displayDIV');
let circle = document.getElementById('circle');
capture.addEventListener('mousemove', handleMouseMove);
function handleMouseMove(event) {
const captureRect = capture.getBoundingClientRect();
const captureWidth = captureRect.right - captureRect.left;
const relativeX = event.x - captureRect.left;
let percent = (relativeX / captureWidth) * 100;
let roundedPercent = parseFloat(Math.round(percent * 100) / 100).toFixed(2);
moveDotTo(roundedPercent);
}
function moveDotTo(percentage) {
const displayRect = display.getBoundingClientRect();
const displayWidth = displayRect.right - displayRect.left;
const circleX = displayRect.left + displayWidth * (percentage / 100);
const circleY = displayRect.top + (displayRect.height / 2);
const style = `top:${circleY}px;left:${circleX}px;`;
circle.setAttribute('style', style);
}
У меня также есть несколько кнопок, с помощью которых можно установить положение точки в DisplayDIV
, например ...
let move20 = document.getElementById('move20');
move20.addEventListener('click', function(event) {
moveDotTo(20);
});
Используя Vanilla JS, а не приемы CSS, как я могу создать функцию для анимации (а не перемещения) точки из ее существующего положения в новое положение.
function animateDotTo(percentage) {
// clever code here
}
Мне нужно иметь возможность вызыватьфункция animateDotTo(percentage)
с помощью кнопки или обработчика события mousemove
.
Точка всегда должна анимироваться в своей новой позиции независимо от того, как происходит движение.Например, если мышь перемещается из левой стороны captureDIV
вокруг нижней части, а затем в правую сторону captureDIV
, точка должна анимироваться по DisplayDIV
, а не прыгать, как сейчас.Равным образом нажатие одной из кнопок move to x%
должно оживить точку от ее текущей позиции до новой.