广告
返回顶部
首页 > 资讯 > 精选 >使用canvas怎么实现一个粒子动效
  • 721
分享到

使用canvas怎么实现一个粒子动效

2023-06-09 13:06:32 721人浏览 泡泡鱼
摘要

本篇文章为大家展示了使用canvas怎么实现一个粒子动效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。绘制刻度此例为小时刻度的绘制:表盘上共有12个小时,Math.PI为180°,每

本篇文章为大家展示了使用canvas怎么实现一个粒子动效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

绘制刻度

此例为小时刻度的绘制:表盘上共有12个小时,Math.PI为180°,每小时占据30°。
.save()表示保存canvas当前环境的状态,在此基础上进行绘制。绘制完成之后,返回之前保存过的路径状态和属性。

分钟刻度同理,改变角度与样式即可。

  // 小时时间刻度  offscreenCanvasCtx.save();  for (var i = 0; i < 12; i++) {    offscreenCanvasCtx.beginPath();    // 刻度颜色    offscreenCanvasCtx.strokeStyle = '#fff';    // 刻度宽度    offscreenCanvasCtx.lineWidth = 3;    // 每小时占据30&deg;    offscreenCanvasCtx.rotate(Math.PI / 6);    // 开始绘制的位置    offscreenCanvasCtx.lineTo(140, 0)    // 结束绘制的位置;    offscreenCanvasCtx.lineTo(120, 0);    // 绘制路径    offscreenCanvasCtx.stroke();  }  offscreenCanvasCtx.restore();

指针指向

以秒针为例:获取当前时间的秒数,并计算对应的偏移角度

  var now = new Date(),    sec = now.getSeconds(),    min = now.getMinutes(),    hr = now.getHours();  hr = hr > 12 ? hr - 12 : hr;    //秒针  offscreenCanvasCtx.save();  offscreenCanvasCtx.rotate(sec * (Math.PI / 30));  ......  offscreenCanvasCtx.stroke();

粒子动效

canvas可以用来绘制复杂,不规则的动画。粒子特效可以用来实现复杂、随机的动态效果。

粒子,指图像数据imageData中的每一个像素点,获取到每个像素点之后,添加属性或事件对区域内的粒子进行交互,达到动态效果。

效果

使用canvas怎么实现一个粒子动效

粒子获取

以下图的图片转化为例,该效果是先在canvas上渲染图片,然后获取文字所在区域的每个像素点。

let image = new Image();  image.src='../image/loGo.png';  let pixels=[]; //存储像素数据  let imageData;  image.width = 300;  image.height = 300  // 渲染图片,并获取该区域内像素信息  image.onload=function(){    ctx.drawImage(image,(canvas.width-image.width)/2,(canvas.height-image.height)/2,image.width,image.height);    imageData=ctx.getImageData((canvas.width-image.width)/2,(canvas.height-image.height)/2,image.width,image.height); //获取图表像素信息 //绘制图像  };

像素信息

图片的大小为300*300,共有90000个像素,每个像素占4位,存放rgba数据。

使用canvas怎么实现一个粒子动效

粒子绘制

 function getPixels(){    var pos=0;    var data=imageData.data; //RGBA的一维数组数据    //源图像的高度和宽度为300px    for(var i=1;i<=image.width;i++){      for(var j=1;j<=image.height;j++){        pos=[(i-1)*image.width+(j-1)]*4; //取得像素位置        if(data[pos]>=0){          var pixel={            x:(canvas.width-image.width)/2+j+Math.random()*20, //重新设置每个像素的位置信息            y:(canvas.height-image.height)/2+i+Math.random()*20, //重新设置每个像素的位置信息            fillStyle:'rgba('+data[pos]+','+(data[pos+1])+','+(data[pos+2])+','+(data[pos+3])+')'          }          pixels.push(pixel);        }      }    }  }  function drawPixels() {    var canvas = document.getElementById("myCanvas");    var ctx = canvas.getContext("2d");    ctx.clearRect(0,0,canvas.width,canvas.height);    var len = pixels.length, curr_pixel = null;    for (var i = 0; i < len; i++) {      curr_pixel = pixels[i];      ctx.fillStyle = curr_pixel.fillStyle;      ctx.fillRect(curr_pixel.x, curr_pixel.y, 1, 1);    }  }

粒子时钟

渲染文字时钟

 function time() {    ctx.clearRect(0,0,canvas.width,canvas.height)    ctx.font = "150px 黑体";    ctx.textBaseline='top';    ctx.fillStyle = "rgba(245,245,245,0.2)";    ctx.fillText(new Date().fORMat('hh:mm:ss'),(canvas.width-textWidth)/2,(canvas.height-textHeight)/2,textWidth,textHeight);  }

效果

使用canvas怎么实现一个粒子动效

获取粒子

文字转换粒子概念同上,获取选定区域的像素,根据筛选条件进行选择并存入数组。经过遍历后重新绘制。

  function getPixels(){    let imgData = ctx.getImageData((canvas.width-textWidth)/2,(canvas.height-textHeight)/2,textWidth,textHeight);    let data = imgData.data    pixelsArr = []    for(let i=1;i<=textHeight;i++){      for(let j=1;j<=textWidth;j++){        pos=[(i-1)*textWidth+(j-1)]*4; //取得像素位置        if(data[pos]>=0){          var pixel={            x:j+Math.random()*20, //重新设置每个像素的位置信息            y:i+Math.random()*20, //重新设置每个像素的位置信息            fillStyle:'rgba('+data[pos]+','+(data[pos+1])+','+(data[pos+2])+','+(data[pos+3])+')'          };          pixelsArr.push(pixel);        }      }    }  }

imgData保存了所选区域内的像素信息,每个像素点占据4位,保存了RGBA四位信息。筛选每个像素的第四位,这段代码中将所有透明度不为0的像素都保存到了数组pixelsArr中。

xy记载了该粒子的位置信息,为了产生效果图中的运动效果,给每个粒子添加了0-20个像素的偏移位置,每次重绘时,偏移位置随机生成,产生运动效果。

粒子重绘

获取粒子之后,需要清除画布中原有的文字,将获取到的粒子重新绘制到画布上去。

  function drawPixels() {    // 清除画布内容,进行重绘    ctx.clearRect(0,0,canvas.width,canvas.height);    for (let i in pixelsArr) {      ctx.fillStyle = pixelsArr[i].fillStyle;      let r = Math.random()*4      ctx.fillRect(pixelsArr[i].x, pixelsArr[i].y, r, r);    }  }

粒子重绘时的样式为筛选像素时原本的颜色与透明度,并且每个在画布上绘制每个粒子时,定义大小参数r,r取值为0-4中随机的数字。最终生成的粒子大小随机。

实时刷新

获取粒子并成功重绘之后,需要页面实时刷新时间。这里采用window.requestAnimationFrame(callback)方法。

  function time() {    ......    getpixels(); //获取粒子    drawPixels(); // 重绘粒子    requestAnimationFrame(time);  }

window.requestAnimationFrame(callback) 方法告诉浏览器您希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画。该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。

该方法不需要设置时间间隔,调用频率采用系统时间间隔(1s)。

上述内容就是使用canvas怎么实现一个粒子动效,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 使用canvas怎么实现一个粒子动效

本文链接: https://www.lsjlt.com/news/256156.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用canvas怎么实现一个粒子动效
    本篇文章为大家展示了使用canvas怎么实现一个粒子动效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。绘制刻度此例为小时刻度的绘制:表盘上共有12个小时,Math.PI为180&deg;,每...
    99+
    2023-06-09
  • 使用Canvas怎么实现一个炫丽的粒子运动效果
    使用Canvas怎么实现一个炫丽的粒子运动效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。html 代码<!DOCTYPE html>&...
    99+
    2023-06-09
  • 使用canvas怎么实现一个粒子动画背景
    使用canvas怎么实现一个粒子动画背景?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建canvas首先需要在需要展示粒子背景的父元素中创建一个canvas标签, 指定wid...
    99+
    2023-06-09
  • 使用CSS3怎么实现一个粒子动画效果
    本篇文章给大家分享的是有关使用CSS3怎么实现一个粒子动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。按钮点击粒子动画<div class="b...
    99+
    2023-06-08
  • 使用jQuery怎么实现一个动态粒子效果
    使用jQuery怎么实现一个动态粒子效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。<!DOCTYPE html><html lan...
    99+
    2023-06-14
  • 怎么在JavaScript中使用canvas实现一个随机粒子特效
    本篇文章给大家分享的是有关怎么在JavaScript中使用canvas实现一个随机粒子特效,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些...
    99+
    2023-06-14
  • 怎么在Html5中使用canvas实现一个粒子时钟
    这篇文章将为大家详细讲解有关怎么在Html5中使用canvas实现一个粒子时钟,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先要创建一个html文件并添加一个canvas画布,如下:<...
    99+
    2023-06-09
  • 怎么使用JavaScript+Canvas实现带跳动效果的粒子动画
    这篇“怎么使用JavaScript+Canvas实现带跳动效果的粒子动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使...
    99+
    2023-07-05
  • JavaScript+Canvas实现带跳动效果的粒子动画
    目录前言实现过程运行效果总结前言 用 HTML5 的 Canvas 元素实现一个带有跳动效果的粒子动画。会用到 Canvas 的2D渲染上下文,通过 JavaScript 编写绘图代...
    99+
    2023-03-14
    JavaScript Canvas实现粒子动画 Canvas粒子动画 JavaScript Canvas
  • CSS3中怎么实现粒子动画效果
    这期内容当中小编将会给大家带来有关CSS3中怎么实现粒子动画效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。按钮点击粒子动画<div class=&qu...
    99+
    2022-10-19
  • 使用canvas怎么实现一个github404动态效果
    使用canvas怎么实现一个github404动态效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。文件目录文件资源文件源码与图片在文章末尾给出代码网页的body部分这里给...
    99+
    2023-06-09
  • 使用Canvas怎么将文本转换为粒子效果
    使用Canvas怎么将文本转换为粒子效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现原理总的来说要做出将文本变成粒子展示的效果其实很简单,实现的原理就是使...
    99+
    2023-06-09
  • JavaScript利用Canvas实现粒子动画倒计时
    目录canvas 粒子动画介绍何为canvas粒子动画是啥canvas定义初始变量初始化canvas和数字文本创建一定数量的点倒计时倒计时文本绘画循环绘制点动画效果图canvas 粒...
    99+
    2022-12-09
    JavaScript Canvas粒子动画倒计时 JavaScript  粒子动画倒计时 JavaScript Canvas 倒计时 JavaScript 倒计时
  • web前端怎么用H5-canvas实现粒子时钟
    这篇文章主要讲解了“web前端怎么用H5-canvas实现粒子时钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端怎么用H5-canvas实现粒子时...
    99+
    2022-10-19
  • 使用canvas怎么实现一个扭蛋机动画效果
    使用canvas怎么实现一个扭蛋机动画效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。布局扭蛋机的布局比较简单,只需要在基础背景上添加一些元素就可以,最主要的是canvas标...
    99+
    2023-06-09
  • 怎样使用HTML5 Canvas创建动态粒子网格动画
    小编给大家分享一下怎样使用HTML5 Canvas创建动态粒子网格动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!添加一个ca...
    99+
    2022-10-19
  • vue3中使用VueParticles实现粒子动态背景效果
    目录particles.vue3官网可以仔细看下这里 有案例跟文档官网 Demo好了直接进入主题 安装使用Vue3 语法糖中使用配置单独写到文件particles.js,代码看起来简...
    99+
    2022-11-13
  • 使用canvas怎么实现一个探照灯效果
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个探照灯效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。</iframe><button id="btn...
    99+
    2023-06-09
  • 使用canvas怎么实现一个数字雨效果
    使用canvas怎么实现一个数字雨效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果图:代码:<!DOCTYPE html><h...
    99+
    2023-06-09
  • 使用canvas怎么实现一个流水灯效果
    使用canvas怎么实现一个流水灯效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下<!DOCTYPE html>  ...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作