cari
Rumahhujung hadapan webtutorial jscanvas怎样做出黑色背景的红色烟花

canvas怎样做出黑色背景的红色烟花

Mar 13, 2018 pm 04:04 PM
canvaslatar belakanghitam

这次给大家带来canvas怎样做出黑色背景的红色烟花,canvas做出黑色背景的红色烟花的注意事项有哪些,下面就是实战案例,一起来看一下。

1.png

html

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

css

body {    background: #000;    margin: 0;
}canvas {    cursor: crosshair;    display: block;}

js

// when animating on canvas, it is best to use requestAnimationFrame instead of setTimeout or setInterval// not supported in all browsers though and sometimes needs a prefix, so we need a shimwindow.requestAnimFrame = (function () {    return window.requestAnimationFrame ||        window.webkitRequestAnimationFrame ||        window.mozRequestAnimationFrame ||        function (callback) {            window.setTimeout(callback, 1000 / 60);
        };
})();// now we will setup our basic variables for the demovar canvas = document.getElementById(&#39;canvas&#39;),
    ctx = canvas.getContext(&#39;2d&#39;),    // full screen dimensions
    cw = window.innerWidth,
    ch = window.innerHeight,    // firework collection
    fireworks = [],    // particle collection
    particles = [],    // starting hue
    hue = 120,    // when launching fireworks with a click, too many get launched at once without a limiter, one launch per 5 loop ticks
    limiterTotal = 5,
    limiterTick = 0,    // this will time the auto launches of fireworks, one launch per 80 loop ticks
    timerTotal = 80,
    timerTick = 0,
    mousedown = false,    // mouse x coordinate,
    mx,    // mouse y coordinate
    my;// set canvas dimensionscanvas.width = cw;
canvas.height = ch;// now we are going to setup our function placeholders for the entire demo// get a random number within a rangefunction random(min, max) {    return Math.random() * (max - min) + min;
}// calculate the distance between two pointsfunction calculateDistance(p1x, p1y, p2x, p2y) {    var xDistance = p1x - p2x,
        yDistance = p1y - p2y;    return Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
}// create fireworkfunction Firework(sx, sy, tx, ty) {    // actual coordinates
    this.x = sx;    this.y = sy;    // starting coordinates
    this.sx = sx;    this.sy = sy;    // target coordinates
    this.tx = tx;    this.ty = ty;    // distance from starting point to target
    this.distanceToTarget = calculateDistance(sx, sy, tx, ty);    this.distanceTraveled = 0;    // track the past coordinates of each firework to create a trail effect, increase the coordinate count to create more prominent trails
    this.coordinates = [];    this.coordinateCount = 3;    // populate initial coordinate collection with the current coordinates
    while (this.coordinateCount--) {        this.coordinates.push([this.x, this.y]);
    }    this.angle = Math.atan2(ty - sy, tx - sx);    this.speed = 2;    this.acceleration = 1.05;    this.brightness = random(50, 70);    // circle target indicator radius
    this.targetRadius = 1;
}// update fireworkFirework.prototype.update = function (index) {    // remove last item in coordinates array
    this.coordinates.pop();    // add current coordinates to the start of the array
    this.coordinates.unshift([this.x, this.y]);    // cycle the circle target indicator radius
    if (this.targetRadius < 8) {        this.targetRadius += 0.3;
    } else {        this.targetRadius = 1;
    }    // speed up the firework
    this.speed *= this.acceleration;    // get the current velocities based on angle and speed
    var vx = Math.cos(this.angle) * this.speed,
        vy = Math.sin(this.angle) * this.speed;    // how far will the firework have traveled with velocities applied?
    this.distanceTraveled = calculateDistance(this.sx, this.sy, this.x + vx, this.y + vy);    // if the distance traveled, including velocities, is greater than the initial distance to the target, then the target has been reached
    if (this.distanceTraveled >= this.distanceToTarget) {
        createParticles(this.tx, this.ty);        // remove the firework, use the index passed into the update function to determine which to remove
        fireworks.splice(index, 1);
    } else {        // target not reached, keep traveling
        this.x += vx;        this.y += vy;
    }
}// draw fireworkFirework.prototype.draw = function () {
    ctx.beginPath();    // move to the last tracked coordinate in the set, then draw a line to the current x and y
    ctx.moveTo(this.coordinates[this.coordinates.length - 1][0], this.coordinates[this.coordinates.length - 1][        1
    ]);
    ctx.lineTo(this.x, this.y);
    ctx.strokeStyle = &#39;hsl(&#39; + hue + &#39;, 100%, &#39; + this.brightness + &#39;%)&#39;;
    ctx.stroke();
    ctx.beginPath();    // draw the target for this firework with a pulsing circle
    ctx.arc(this.tx, this.ty, this.targetRadius, 0, Math.PI * 2);
    ctx.stroke();
}// create particlefunction Particle(x, y) {    this.x = x;    this.y = y;    // track the past coordinates of each particle to create a trail effect, increase the coordinate count to create more prominent trails
    this.coordinates = [];    this.coordinateCount = 5;    while (this.coordinateCount--) {        this.coordinates.push([this.x, this.y]);
    }    // set a random angle in all possible directions, in radians
    this.angle = random(0, Math.PI * 2);    this.speed = random(1, 10);    // friction will slow the particle down
    this.friction = 0.95;    // gravity will be applied and pull the particle down
    this.gravity = 1;    // set the hue to a random number +-20 of the overall hue variable
    this.hue = random(hue - 20, hue + 20);    this.brightness = random(50, 80);    this.alpha = 1;    // set how fast the particle fades out
    this.decay = random(0.015, 0.03);
}// update particleParticle.prototype.update = function (index) {    // remove last item in coordinates array
    this.coordinates.pop();    // add current coordinates to the start of the array
    this.coordinates.unshift([this.x, this.y]);    // slow down the particle
    this.speed *= this.friction;    // apply velocity
    this.x += Math.cos(this.angle) * this.speed;    this.y += Math.sin(this.angle) * this.speed + this.gravity;    // fade out the particle
    this.alpha -= this.decay;    // remove the particle once the alpha is low enough, based on the passed in index
    if (this.alpha <= this.decay) {
        particles.splice(index, 1);
    }
}// draw particleParticle.prototype.draw = function () {
    ctx.beginPath();    // move to the last tracked coordinates in the set, then draw a line to the current x and y
    ctx.moveTo(this.coordinates[this.coordinates.length - 1][0], this.coordinates[this.coordinates.length - 1][        1
    ]);
    ctx.lineTo(this.x, this.y);
    ctx.strokeStyle = &#39;hsla(&#39; + this.hue + &#39;, 100%, &#39; + this.brightness + &#39;%, &#39; + this.alpha + &#39;)&#39;;
    ctx.stroke();
}// create particle group/explosionfunction createParticles(x, y) {    // increase the particle count for a bigger explosion, beware of the canvas performance hit with the increased particles though
    var particleCount = 30;    while (particleCount--) {
        particles.push(new Particle(x, y));
    }
}// main demo loopfunction loop() {    // this function will run endlessly with requestAnimationFrame
    requestAnimFrame(loop);    // increase the hue to get different colored fireworks over time
    hue += 0.5;    // normally, clearRect() would be used to clear the canvas
    // we want to create a trailing effect though
    // setting the composite operation to destination-out will allow us to clear the canvas at a specific opacity, rather than wiping it entirely
    ctx.globalCompositeOperation = &#39;destination-out&#39;;    // decrease the alpha property to create more prominent trails
    ctx.fillStyle = &#39;rgba(0, 0, 0, 0.5)&#39;;
    ctx.fillRect(0, 0, cw, ch);    // change the composite operation back to our main mode
    // lighter creates bright highlight points as the fireworks and particles overlap each other
    ctx.globalCompositeOperation = &#39;lighter&#39;;    var text = "HAPPY NEW YEAR !";
    ctx.font = "50px sans-serif";    var textData = ctx.measureText(text);
    ctx.fillStyle = "rgba(" + parseInt(random(0, 255)) + "," + parseInt(random(0, 255)) + "," + parseInt(random(0,        255)) + ",0.3)";
    ctx.fillText(text, cw / 2 - textData.width / 2, ch / 2);    // loop over each firework, draw it, update it
    var i = fireworks.length;    while (i--) {
        fireworks[i].draw();
        fireworks[i].update(i);
    }    // loop over each particle, draw it, update it
    var i = particles.length;    while (i--) {
        particles[i].draw();
        particles[i].update(i);
    }    // launch fireworks automatically to random coordinates, when the mouse isn&#39;t down
    if (timerTick >= timerTotal) {        if (!mousedown) {            // start the firework at the bottom middle of the screen, then set the random target coordinates, the random y coordinates will be set within the range of the top half of the screen
            for (var h = 0; h < 50; h++) {
                fireworks.push(new Firework(cw / 2, ch / 2, random(0, cw), random(0, ch)));
            }
            timerTick = 0;
        }
    } else {
        timerTick++;
    }    // limit the rate at which fireworks get launched when mouse is down
    if (limiterTick >= limiterTotal) {        if (mousedown) {            // start the firework at the bottom middle of the screen, then set the current mouse coordinates as the target
            fireworks.push(new Firework(cw / 2, ch / 2, mx, my));
            limiterTick = 0;
        }
    } else {
        limiterTick++;
    }
}// mouse event bindings// update the mouse coordinates on mousemovecanvas.addEventListener(&#39;mousemove&#39;, function (e) {
    mx = e.pageX - canvas.offsetLeft;
    my = e.pageY - canvas.offsetTop;
});// toggle mousedown state and prevent canvas from being selectedcanvas.addEventListener(&#39;mousedown&#39;, function (e) {
    e.preventDefault();
    mousedown = true;
});
canvas.addEventListener(&#39;mouseup&#39;, function (e) {
    e.preventDefault();
    mousedown = false;
});// once the window loads, we are ready for some fireworks!window.onload = loop;

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS中的async/await

React.js中的CSS使用

Atas ialah kandungan terperinci canvas怎样做出黑色背景的红色烟花. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Masa Depan Python dan JavaScript: Trend dan RamalanMasa Depan Python dan JavaScript: Trend dan RamalanApr 27, 2025 am 12:21 AM

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

Python vs JavaScript: Persekitaran dan Alat PembangunanPython vs JavaScript: Persekitaran dan Alat PembangunanApr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Adakah JavaScript ditulis dalam C? Memeriksa buktiAdakah JavaScript ditulis dalam C? Memeriksa buktiApr 25, 2025 am 12:15 AM

Ya, teras enjin JavaScript ditulis dalam C. 1) Bahasa C menyediakan prestasi yang efisien dan kawalan asas, yang sesuai untuk pembangunan enjin JavaScript. 2) Mengambil enjin V8 sebagai contoh, terasnya ditulis dalam C, menggabungkan kecekapan dan ciri-ciri berorientasikan objek C. 3) Prinsip kerja enjin JavaScript termasuk parsing, penyusun dan pelaksanaan, dan bahasa C memainkan peranan penting dalam proses ini.

Peranan JavaScript: Membuat Web Interaktif dan DinamikPeranan JavaScript: Membuat Web Interaktif dan DinamikApr 24, 2025 am 12:12 AM

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript: Sambungan dijelaskanC dan JavaScript: Sambungan dijelaskanApr 23, 2025 am 12:07 AM

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

Dari laman web ke aplikasi: Aplikasi pelbagai JavaScriptDari laman web ke aplikasi: Aplikasi pelbagai JavaScriptApr 22, 2025 am 12:02 AM

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python vs JavaScript: Gunakan Kes dan Aplikasi MembandingkanPython vs JavaScript: Gunakan Kes dan Aplikasi MembandingkanApr 21, 2025 am 12:01 AM

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

Peranan C/C dalam JavaScript Jurubah dan PenyusunPeranan C/C dalam JavaScript Jurubah dan PenyusunApr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).