Point DIV at Another DIV (Angle Between Two Points)
const dot = document.createElement('div')
Object.assign(dot.style, {
position: 'absolute',
left: '100px',
top: '100px',
width: '10px',
height: '10px',
transform: 'translate(-5px, -5px)',
background: 'black'
});
document.body.appendChild(dot);
const pointer = document.createElement('div');
Object.assign(pointer.style, {
position: 'absolute',
left: '-10px',
top: '-5px',
width: '20px',
height: '10px',
background: 'red'
});
document.body.appendChild(pointer);
// desktop only (`touchmove` needed for mobile)
document.addEventListener('mousemove', (e) => {
const dx = parseFloat(dot.style.left) - e.clientX;
const dy = parseFloat(dot.style.top) - e.clientY;
const angle = Math.atan2(dy, dx) / Math.PI * 180;
pointer.style.transform = `
translate(${e.clientX}px, ${e.clientY}px)
rotate(${angle}deg)
`;
});
Moving your mouse around the page, you’ll notice the red div
always points at the black div
.
(more…)
Wobbling Ball with SVG
const el = document.body.appendChild(
document.createElement('div'));
el.innerHTML = `
<svg width="100%" height="100%">
<circle
id="circ"
cx="0" cy="0" r="50"
fill="red" style="will-change: transform;"/>
</svg>
<style>
svg, div, body, html {
overflow: visible;
height: 100%;
width: 100%;
margin: 0; padding: 0;
}
</style>
`;
let w = window.innerWidth,
h = window.innerHeight,
x = w / 2,
y = h / 2,
vx = vy = dx = dy = 0,
damp = 0.99, div = 8, ticks = 0,
wobbleChance = 0.03,
startTick = 50;
function loop() {
w = window.innerWidth;
h = window.innerHeight;
if (x > w){
vx *= -1;
dx *= -1;
x = w;
} else if (x < 0){
vx *= -1;
dx *= -1;
x = 0;
}
if (y > h) {
vy *= -1;
dy *= -1;
y = h;
} else if (y < 0) {
vy *= -1;
dy *= -1;
y = 0
}
if (
Math.random() < wobbleChance ||
ticks === startTick) {
dx += Math.random() * 10 - 5;
dy += Math.random() * 10 - 5;
}
dx *= damp;
dy *= damp;
vx += (dx - vx) / div;
vy += (dy - vy) / div;
x += vx;
y += vy;
circ.setAttribute('transform', `translate(${x} ${y})`);
ticks++;
window.requestAnimationFrame(loop);
}
loop();
function resize() {
const radius = Math.min(w, h) * .05;
// `window.circ` is the global id (⌐■_■)
circ.r.baseVal.value = radius;
}
resize();
window.addEventListener('resize', resize);
A wobbling ball with svg.
Draw a Spiral with Resize
const canvas = document.body.appendChild(
document.createElement('canvas')
);
const c = canvas.getContext('2d');
function resize() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
draw();
}
function draw() {
c.clearRect(0, 0, canvas.width, canvas.height);
c.fillStyle = 'blue';
const iter = 300,
halfWidth = window.innerWidth / 2,
halfHeight = window.innerHeight / 2;
let rad = 0, theta = 0, x, y;
for (let i = 0; i < iter; i++) {
x = halfWidth + rad * Math.cos(theta);
y = halfHeight + rad * Math.sin(theta);
c.fillRect(x, y, 5, 5);
rad += Math.min(window.innerWidth, window.innerHeight) * 0.0015;
theta += .1;
}
}
resize();
window.addEventListener('resize', resize);
Expanding on yesterdays post, this draws a resizable sprial on a canvas.