Kontynuujemy poprzedni przykład, zrobimy sobie małą kropkę, która podąża za kursorem myszy, gdziekolwiek go nie przesuniemy. Do dzieła.
Ok, modyfikujemy nieznacznie markup:
<body>
<div id="drawme"></div>
<div id="dot"></div>
<script type="module" src="./main.js"></script>
</body>
Modyfikujemy style, już nie div tylko po id, plus dodajemy style dla kropki:
body {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
#drawme {
width: 1200px;
height: 600px;
background-color: teal;
}
#dot {
position: absolute;
background-color: pink;
border-radius: 50%;
opacity: 0.6;
pointer-events: none;
left: -20px;
top: -20px;
width: 40px;
height: 40px;
}
Modyfikujemy main.js, zbieramy po id i diva i kropkę:
import { drawCircle, drawLine } from "./drawing.js";
let isPressed = false;
let x;
let y;
let div = document.querySelector("#drawme");
let dot = document.querySelector("#dot");
Ok, dodajmy do window pointer event i niech coś wypisuje:
window.addEventListener('pointermove', function(e){
console.log("bla");
console.log(`x: ${e.clientX}, y: ${e.clientY}`);
});
Jak już widzimy, że działa, to dodajemy animację:
window.addEventListener('pointermove', function(e){
dot.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;
});
Dlaczego zmieniamy transform, a nie top i left? Bo CSS triggers, bo optymalizacja, bo nie chcemy ruszać layoutu…