Cara membuat Efek Jejak Tikus warna warni

Disini kita akan membuat jejak tikus warna warni menggunakan html css dan javascript

index.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <link rel="stylesheet" href="/canvas.js">

</head>

<body>

    <canvas id="canvas"></canvas>

</body>

<script src="/canvas.js"></script>

</html>
style.css
body{

    margin: 0;

    overflow: hidden;

}
canvas.js
window.onload = () => {

const canvas = document.querySelector('#canvas');

const ctx = canvas.getContext('2d');

canvas.width = window.innerWidth;

canvas.height = window.innerHeight;

ctx.fillStyle = 'rgba(0, 0, 0, 1)';

ctx.fillRect(0, 0, canvas.width, canvas.height);

const mouse = {

    x: canvas.width / 2,

    y: canvas.height / 2

}

const clearCanvas = () => {

    ctx.fillStyle = 'rgba(10, 10, 10, 0.5)';

    ctx.fillRect(0, 0, canvas.width, canvas.height);

}

const resizeCanvas = () => {

    canvas.width = window.innerWidth;

    canvas.height = window.innerHeight;

};

const randNum = (min, max) => Math.random() * (max - min) + min;

class Particle {

    constructor(x, y, hue) {

        this.x = x;

        this.y = y;

        this.speedX = randNum(-2, 2);

        this.speedY = randNum(-2, 2);

        this.radius = randNum(1, 8);

        this.hue = hue || 0;

    }

    update() {

        this.radius = Math.max(this.radius - 0.1, 0);

        this.x += this.speedX;

        this.y += this.speedY;

        this.draw();

    }

    draw() {

        ctx.beginPath();

        ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);

        ctx.fillStyle = `hsla(${this.hue}, 100%, 50%, 1)`;

        ctx.fill();

    }

}

class Effect {

    constructor() {

        this.particles = [];

        this.hue = 0;

    }

    update() {

        this.hue = (this.hue + 5) % 360;

        this.particles = this.particles.filter(p => p.radius > 0);

        this.particles.forEach((p) => p.update());

    }

    addNewParticles() {

        for (let i = 0; i < 8; i++) {

            this.particles.push(new Particle(mouse.x, mouse.y, this.hue));

        }

    }

}

const effect = new Effect();

const onMouseMove = (e) => {

    mouse.x = e?.clientX || e.touches[0].clientX;

    mouse.y = e?.clientY || e.touches[0].clientY;

    effect.addNewParticles();

}

const tick = () => {

    clearCanvas();

    effect.update();

    window.requestAnimationFrame(tick);

}

window.requestAnimationFrame(tick);

window.addEventListener('resize', resizeCanvas);

window.addEventListener('mousemove', onMouseMove);

window.addEventListener('touchmove', onMouseMove);

window.addEventListener('click', effect.addNewParticles.bind(effect));

alert("Move your finger/mouse over the screen");

}
Dan hasil nya kan seperti ini 
 
 

Related Articles

Comments