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

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

1.png

html


登录后复制

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('canvas'),    ctx = canvas.getContext('2d'),    // 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 = 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 = 'hsl(' + hue + ', 100%, ' + this.brightness + '%)';    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 = 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 = 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('mousemove', function (e) {    mx = e.pageX - canvas.offsetLeft;    my = e.pageY - canvas.offsetTop;});// toggle mousedown state and prevent canvas from being selectedcanvas.addEventListener('mousedown', function (e) {    e.preventDefault();    mousedown = true;});canvas.addEventListener('mouseup', function (e) {    e.preventDefault();    mousedown = false;});// once the window loads, we are ready for some fireworks!window.onload = loop;

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS中的async/await

React.js中的CSS使用

以上就是canvas怎样做出黑色背景的红色烟花的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2783290.html

(0)
上一篇 2025年3月8日 16:47:27
下一篇 2025年3月8日 16:47:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

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

    这次给大家带来canvas怎样做出黑色背景的青色烟花,canvas做出黑色背景的青色烟花的注意事项有哪些,下面就是实战案例,一起来看一下。 html 2018 登录后复制 css html,body {    padding: 0px;  …

    2025年3月8日
    200
  • js实现将canvas生成图片保存或直接保存一张图片

    本文主要和大家分享js实现将canvas生成图片保存或直接保存一张图片,希望能帮助到大家。 将canvas数组保存 function downLoadImage(canvas,name) {    var a = document.crea…

    编程技术 2025年3月8日
    200
  • js与canvas合成图片做出微信公众号海报功能

    这次给大家带来js与canvas合成图片做出微信公众号海报功能,js与canvas合成图片做出微信公众号海报功能的注意事项有哪些,下面就是实战案例,一起来看一下。 在微信公众号开发中,很多时候都有个需求是一张图加上头像和昵称或者其他数据生成…

    2025年3月8日 编程技术
    200
  • js和canvas实现滑动拼图验证码功能

    本文主要和大家分享js和canvas实现滑动拼图验证码功能,现在经常会遇到滑动拼图验证,希望能帮助到大家。   上图为网易云盾的滑动拼图验证码,其应该有一个专门的图片库,裁剪的位置是固定的。我的想法是,随机生成图片,随机生成位置,再用can…

    2025年3月8日 编程技术
    200
  • js和canvas实现图片预览压缩上传

    本文主要大家分享js和canvas实现图片预览压缩上传的方法,结合实例代码和大家讲解,希望能帮助到大家。 第一步:用户选择需要上传的图片 登录后复制 在选定了图片后 upload 函数将被触发,我们需要在这个函数中,获取到图片的资源,将它压…

    2025年3月8日
    200
  • canvas怎么实现轨迹回放

    这次给大家带来canvas怎么实现轨迹回放,canvas实现轨迹回放的注意事项有哪些,下面就是实战案例,一起来看一下。 本文通过json机构,HTML代码以及JS代码详细给大家分析了canvas轨迹回放功能实现的过程,以下是全部内容。 js…

    编程技术 2025年3月8日
    200
  • Particles.js实现粒子动态背景动画

    这次给大家带来Particles.js实现粒子动态背景动画,Particles.js实现粒子动态背景动画的注意事项有哪些,下面就是实战案例,一起来看一下。 操作过程: 网上有基本流程,可以参考一下,不过直接用在登录页面 会有小bug,需要调…

    编程技术 2025年3月8日
    200
  • canvas与JS实现动态时钟动画

    这次给大家带来canvas与js实现动态时钟动画,canvas与js实现动态时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。 先来看看运行效果: 完整实例代码: canvas时钟 canvas { border: 1px soli…

    2025年3月8日
    200
  • js怎么封装Canvas成插件

    这次给大家带来js怎么封装Canvas成插件,js封装Canvas成插件的注意事项有哪些,下面就是实战案例,一起来看一下。 之前就说过,我想写一个canvas画统计图的插件,现在写好了 先说下实现的功能吧:   1.可以通过自定义X轴坐标属…

    编程技术 2025年3月8日
    200
  • canvas怎么编辑操作图像

    这次给大家带来canvas怎么编辑操作图像,canvas编辑操作图像的注意事项有哪些,下面就是实战案例,一起来看一下。 本次文章将分为几个小功能的形式来详细介绍canvas图像编辑 缩放 下面是一张分析图,假设默认情况下,图片和canvas…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论