前端开发whqet,csdn,王海庆,whqet,前端开发专家

昨天我们学习了利用requestAnimationFrame优化动画控制,然后就忍不住冲动,在fork别人codepen的基础上,实现了这个炫彩logo粒子效果,效果预览如下。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
==== 炫彩logo粒子1====    ==全屏预览==   ==在线编辑==    ==下载收藏==    ==赞助投票==
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

思路解析

1.canvas绘制图像

2.取得图像像素点

3.粒子效果附加在像素点上

实现步骤

html文档结构和css非常简单,不赘述,直接来代码。

<canvas id='c'></canvas>
html, body {height: 100%;
}body {background: black;overflow: hidden;
}canvas {max-width: 100%;
}

然后是核心的JS,这里我们同样用到requestAnimationFrame,不再详述,不确切的同学可以参加上篇文章。

为了避免canvas的跨域问题,这里使用base64的方式使用logo图片,图片转base64的工具可以使用这个。base64的方式太占篇幅,我们放到一个变量里,扔在代码的最前方,然后设置canvas,加载图像。

//数据存储,Base64图片信息,太长了占屏太多,请使劲往下拉。
var picUrl = "data:image/png;base64,……";
//canvas基础设置
var canvas = document.getElementById("c"),ctx = canvas.getContext("2d"),w = canvas.width = window.innerWidth,h = canvas.height = window.innerHeight,logoParticles = [],particleIndex = 0,logo = new Image(),hue = 0;
//设置图像
logo.src = picUrl;

当图像加载完成后,绘制图像,获取图像像素点,遍历像素点绑定粒子。

//加载完成后,获取图像像素,将粒子绑定在图像像素上
logo.onload = function() {var posX = (w - this.width) / 2,posY = (h - this.height) / 2;//绘制图形ctx.drawImage(this, posX, posY);//获取像素点var imgData = ctx.getImageData(0, 0, w, h),pixels = imgData.data;//遍历像素点,绑定粒子for (var y = 0; y < imgData.height; y += 3) {for (var x = 0; x < imgData.width; x += 3) {var alpha = pixels[((imgData.width * y) + x) * 4 + 3];if (alpha > 0) {logoParticles.push(new Particle(x, y));}}}//调用动画animate();
};

接着使用requestAnimationFrame动画机制动画粒子。

//requesetAnimationFrame的方式设置动画
function animate() {//调用polyfillrequestAnimationFrame(animate);//本案例动画ctx.fillStyle = "rgba(0,0,0,.1)";ctx.fillRect(0, 0, w, h);for (var i in logoParticles) {logoParticles[i].draw();}hue += 1;
}

粒子类的属性有:origX、origY代表原来的坐标,x、y代表即时坐标,color代表颜色,maxLife代表最大生命周期,lift代表生命时间,vx、vy代表x、y方向的速度,grav代表重力,index代表粒子序号。

粒子类的方法有:draw绘制方法,update动画机制,reset重置,random去随机数。详细代码如下。

//粒子类定义
function Particle(x, y) {this.origX = this.x = x;this.origY = this.y = y;this.color = "white";this.maxLife = this.random(20);this.life = 0;this.vx = this.random(-1, 1);this.vy = this.random(-1, 1);this.grav = .04;this.index = particleIndex;logoParticles[particleIndex] = this;particleIndex++;
}
//粒子原型,draw、update、reset、random方法
Particle.prototype = {constructor: Particle,//绘制draw: function() {ctx.fillStyle = this.color;ctx.fillRect(this.x, this.y, 1, 1);this.update();},//动画update: function() {if (this.life >= this.maxLife) {logoParticles[this.index].reset();}this.x += this.vx;this.y += this.vy;this.vy += this.grav;this.life++;},//重置reset: function() {this.x = this.origX;this.y = this.origY;this.life = 0;this.color = "hsl(" + hue + ", 100%, 50%)";this.vx = this.random(-1, 1);this.vy = this.random(-1, 1);},//取随机数random: function() {var min = arguments.length == 1 ? 0 : arguments[0],max = arguments.length == 1 ? arguments[0] : arguments[1];return Math.random() * (max - min) + min;}};

相关阅读

1.requestAnimationFrame动画控制详解

2. html5烟花绽放效果

3.html5式程序猿表白

4.单击控制爆炸粒子

5.小方框粒子

6.多彩折回弹起粒子

7.逼真火焰效果

8.WebGL酷炫粒子效果

感谢您耐心读完。

----------------------------------------------------------

前端开发whqet,关注web前端开发,分享相关资源,欢迎点赞,欢迎拍砖。

---------------------------------------------------------------------------------------------------------

炫彩logo粒子效果相关推荐

  1. iOS动画开发之五——炫酷的粒子效果

    iOS动画开发之五--炫酷的粒子效果 在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一 ...

  2. 简直要逆天!超炫的 HTML5 粒子效果进度条

    我喜欢粒子效果作品,特别是那些能够应用于实际的,例如这个由 Jack Rugile 基于 HTML5 Cavnas 编写的进度条效果.看着这么炫的 Loading 效果,即使让我多等一会也无妨:)你呢 ...

  3. 使用PS钢笔工具制作炫彩Logo

    大家是不是觉得别人的Logo怎么就那么漂亮呢?本篇PS教程将要教大家如何使用 Photoshop 制作多彩立体感光 Logo ,如果你学会了这个 Photoshop 教程,你可以制作出多种的炫彩形状来 ...

  4. qt 实现拖动矩形角度_PPT技巧应用—利用PPT的遮罩效果来实现文字的炫彩变化

    在运用PPT的实际过程当中,很多小伙伴不知道怎么操作才能完成文字的特殊炫彩效果,下面我们就来给大家讲讲如何通过PPT的遮罩效果来实现文字的超级炫彩功能. 首先,我们新建一个空白PPT文档,在插入菜单下 ...

  5. Python实践:使用Turtle模块绘制炫彩螺旋线

    hi,我是梁同学.今天还是来绘制一个炫彩的图像效果,可以让用户输入数值,绘制炫彩螺旋线的效果. 透露一下,19行代码轻松解决信不信? import turtle import time as tm t ...

  6. pyqt 取鼠标处文字_爱剪辑:炫彩的动态标题文字特效,这招让视频片头LOGO更酷炫...

    爱剪辑学习委员会提醒您: 道路千万条,学习第一条. 教程不学会,制作两行泪. 今天教大家制作炫彩的动态标题文字特效,3步即可快速学会,让你立马不再流泪. 爱剪辑官网下载:http://www.aiji ...

  7. html星空炫彩粒子,炫彩粒子模拟器游戏

    炫彩粒子模拟器游戏是一款效果精美趣味十足超棒的模拟创意类游戏.用手指触摸手机屏幕进行滑动.点击.多点触摸,就可以产生令人心情愉快的效果.魔幻粒子拥有很多旋涡物质,华丽的视觉效果,具有绽放.阳光和镜面反 ...

  8. html星空炫彩粒子,炫彩粒子模拟

    炫彩粒子模拟游戏下载分享,中文内容,各位朋友们可以轻松体验.拥有自由的设置功能,你们可以修改粒子的颜色和大小等等参数,在这里体验最解压的手指粒子操作.画面绚丽,喜欢的朋友快来下载吧. 炫彩粒子模拟游戏 ...

  9. Photoshop绘制炫彩的的立体圆环LOGO教程

    http://www.missyuan.net/school/ps_2014/photoshop_17712.html Photoshop绘制炫彩的的立体圆环LOGO教程 时间:2014-12-20 ...

最新文章

  1. 1.0 深度学习回顾与PyTorch简介 - PyTorch学习笔记
  2. poj 2388 排序的水题
  3. JS 无法清除Cookie的解决方法
  4. [html]html实现页面跳转都有哪些方法?
  5. ecshop 全目录说明
  6. conda环境内安装gcc4.8.5(无root权限)
  7. FFmpeg源代码简单分析:avformat_write_header()
  8. neo4j安装与示例
  9. mysql服务器相互作用的协议_以下哪个不是与mysql服务器相互作用的通讯协议
  10. H5 下载文件到本地
  11. 这才是晕了哟,dos之家上全是graybird???????????
  12. 人工智能导论期末复习题
  13. 评委对计算机知识竞赛的提问,评委评分知识竞赛答题软件
  14. python计算图像面积_利用图像处理计算叶片面积
  15. 微信小程序.阿里巴巴矢量图标库iconfont使用
  16. 《魔法黎明(Dawn of Magic)》反复刷BOSS(三)
  17. TCmalloc (google开源项目核心部分模拟实现)
  18. 计算机考研分数403,403分考研经验:清华计算机研究生很容易考上
  19. 使用Eagle2进行单倍型分析
  20. java 时区 edt_JAVA TimeZone发行EDT对EST

热门文章

  1. 串口定义以及串口交叉线的制作
  2. Outlook电脑客户端上如何同步企业微信的日历
  3. ZZNUOJ_C语言1001 : 植树问题(完整代码)
  4. 口袋妖怪 java_java – 口袋妖怪黄色包裹过渡
  5. linux core文件的信息,linux core文件分析
  6. 高压放大器使用函数波产生器当输入时的工作原理是什么?
  7. excel 汇总 mysql_Excel中用SQL语句实现多工作簿汇总
  8. 神经网络控制系统的特点,神经网络控制结构包括
  9. Axure RP 9 for mac(交互原型设计软件)支持m1
  10. 《JavaScript设计模式》——2.2 包装明星——封装