利用canvas打造一个炫酷的粒子背景,当然还有一些库都可以的,这次我们手写这个背景,主要的还是JS,canvas只是画布本身没有什么效果的,只是接口,还是需要JS去完成的。
canvas标签说明:
这个 HTML 元素是为了客户端矢量图形而设计的。它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上。
canvas 标记由 Apple 在 Safari 1.3 Web 浏览器中引入。对 HTML 的这一根本扩展的原因在于,HTML 在 Safari 中的绘图能力也为 Mac OS X 桌面的 Dashboard 组件所使用,并且 Apple 希望有一种方式在 Dashboard 中支持脚本化的图形。
Firefox 1.5 和 Opera 9 都跟随了 Safari 的引领。这两个浏览器都支持canvas标记。
这是html5的一个新标签,换言之就是IE678直接GG,所以主要还是在现代浏览器上所使用,不过现在用IE678的人估计也很少。
那怎么做呢?
首先我们需要在页面中写入canvas标签(加点内联样式吧,比较懒 --)

<canvas id="canvas" style="position:absolute;width:100%;height:100%;background:#000;"></canvas>

接下来就是重点JS了,话不多说直接上代码

window.requestAnimFrame = (function () {return window.requestAnimationFrame ||window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame ||function (callback) {window.setTimeout(callback, 1000 / 60);};})();var can = document.getElementById("canvas");var cxt = can.getContext("2d");can.width = 1920;can.height = 950;cxt.lineWidth = 0.3;//初始链接线条显示位置var mousePosition = {x: 30 * can.width / 100,y: 30 * can.height / 100}//圆形粒子对象参数var dots = {n: 500,//圆形粒子个数distance: 50,//圆形粒子之间的距离d_radius: 100,//粒子距离鼠标点的距离array: []//保存n个圆形粒子对象
    }//创建随即颜色值function colorValue(min) {return Math.floor(Math.random() * 255 + min);}function createColorStyle(r, g, b) {return "rgba(" + r + "," + g + "," + b + ", 1)";}//混合两个圆形粒子的颜色function mixConnect(c1, r1, c2, r2) {//圆的颜色 半径return (c1 * r1 + c2 * r2) / (r1 + r2);};//生成线条的颜色function lineColor(dot1, dot2) {//获取具体的圆的颜色再计算var color1 = dot1.color,color2 = dot2.color;var r = mixConnect(color1.r, dot1.radius, color2.r, dot2.radius);var g = mixConnect(color1.g, dot1.radius, color2.g, dot2.radius);var b = mixConnect(color1.b, dot1.radius, color2.b, dot2.radius);return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b));}//生成圆形粒子的颜色对象function Color(min) {min = min || 0;this.r = colorValue(min);this.g = colorValue(min);this.b = colorValue(min);this.style = createColorStyle(this.r, this.g, this.b);}//创建圆形粒子对象function Dot() {//圆形粒子随机圆心坐标点this.x = Math.random() * can.width;this.y = Math.random() * can.height;//x y 方向运动的速度值this.vx = -0.5 + Math.random();this.vy = -0.5 + Math.random();this.radius = Math.random() * 5;//this.color = "#ff3333";this.color = new Color();}//绘制出圆形粒子Dot.prototype.draw = function () {cxt.beginPath();cxt.fillStyle = this.color.style;cxt.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);cxt.fill();}//添加圆形粒子function createCircle() {for (var i = 0; i < dots.n; i++) {dots.array.push(new Dot());}}//绘制出圆形粒子function drawDots() {for (var i = 0; i < dots.n; i++) {var dot = dots.array[i];dot.draw();}}//drawDots();//移动function moveDots() {for (var i = 0; i < dots.n; i++) {var dot = dots.array[i];//当圆形粒子对象碰壁的时候就反弹回来if (dot.y < 0 || dot.y > can.height) {dot.vx = dot.vx;dot.vy = -dot.vy;} else if (dot.x < 0 || dot.x > can.width) {dot.vx = -dot.vx;dot.vy = dot.vy;}//给圆形粒子圆心坐标加上速度值移动圆形粒子dot.x += dot.vx;dot.y += dot.vy;}}//链接粒子对象function connectDots() {for (var i = 0; i < dots.n; i++) {for (var j = 0; j < dots.n; j++) {iDot = dots.array[i];jDot = dots.array[j];if ((iDot.x - jDot.x) < dots.distance && (iDot.y - jDot.y) < dots.distance && (iDot.x - jDot.x) > -dots.distance && (iDot.y - jDot.y) > -dots.distance) {if ((iDot.x - mousePosition.x) < dots.d_radius && (iDot.y - mousePosition.y) < dots.d_radius && (iDot.x - mousePosition.x) > -dots.d_radius && (iDot.y - mousePosition.y) > -dots.d_radius) {cxt.beginPath();//cxt.strokeStyle = "yellow";cxt.strokeStyle = lineColor(iDot, jDot);cxt.moveTo(iDot.x, iDot.y);cxt.lineTo(jDot.x, jDot.y);cxt.closePath();cxt.stroke();}}}}}createCircle();//让圆形粒子不断的移动function animateDots() {cxt.clearRect(0, 0, can.width, can.height);moveDots();connectDots()drawDots();requestAnimFrame(animateDots);}animateDots();can.onmousemove = function (ev) {var ev = ev || window.event;mousePosition.x = ev.pageX;mousePosition.y = ev.pageY;}can.onmouseout = function () {mousePosition.x = can.width / 2;mousePosition.y = can.height / 2;}

JS代码有点多,大家再用的时候封装好,直接引入JS文件就可以了

参考网上大神,具体来源不太记得,如有侵权,联系博主删除~

fakin前端博客,设计路上的前端日记

转载于:https://www.cnblogs.com/fakin/p/7478006.html

利用canvas打造一个炫酷的粒子背景相关推荐

  1. 用canvas画一个炫酷的粒子动画倒计时

    前言

  2. 使用CoordinatorLayout打造一个炫酷的详情页

    原文链接:http://www.jianshu.com/p/5287d090e777 开发中如果能恰当的使用material design的一些设计,不仅能让你的APP更炫酷,最重要的是开发起来eas ...

  3. 原生Android打造一个炫酷的底部导航栏

    最近浏览各大平台,发现各种导航栏层出不穷,出于好奇心,我也来试试.先上个效果图 代码也简单:首先布局文件 <?xml version="1.0" encoding=" ...

  4. 如何利用GitHub设计一个炫酷的个人网站(含代码)

    1.在开始制作之前我们先预览一下我的网站吧! 1.方式一: 由于是手机版的所以用手机访问下面的链接体验比较好一点: https://tom-shushu.github.io/MyWeb.github. ...

  5. 现学现卖做一个炫酷的动态背景页面

    很喜欢酷炫的页面,自从看了抖音的主页之后(如下)(链接),就决定要也做一个牛逼的动态背景页面 对...背景是视频,而且还有音效,太牛逼了 然后决定自己做一个,废话不说,先弄代码: 这里为了设计简便,用 ...

  6. 一个炫酷的动态背景页面

    喜欢酷炫的页面,自从看了抖音的主页之后(如下)(链接),就决定要也做一个牛逼的动态背景页面 对...背景是视频,而且还有音效,太牛逼了 然后决定自己做一个,废话不说,先弄代码: 这里为了设计简便,用了 ...

  7. Hexo | NexT打造一个炫酷博客

    文章目录 写在前面 基本定义 博客搭建 初级 基础功能篇 站点配置文件 网页样式篇 需要了解的 修改文章页宽 修改小型代码块颜色 修改链接文字样式 修改[Read More]按钮样式 修改标签云(ta ...

  8. particles超炫酷的粒子背景特效

    话不多说先上一个demo效果图: 测试地址:https://codepen.io/VincentGarreau/pen/pnlso particlesJS 开源在Github上:https://git ...

  9. html炫酷边框样式,利用SVG和CSS3来实现一个炫酷的边框动画

    这篇文章主要介绍了利用SVG和CSS3来实现一个炫酷的边框动画,不使用JavaScript使得编写过程轻松了不少,需要的朋友可以参考下 今天我们来探索一下Carl Philipe Brenner的网站 ...

  10. 一个炫酷的仿雷达扫描和扩散效果——自定义View就是这么简单

    高仿雷达扫描效果和仿水波纹中心扩散效果,手把手教你撸一个炫酷的自定义view. 于亚豪的博客地址: blog.csdn.net/androidstar- 我们先看效果图吧 Markdown Markd ...

最新文章

  1. python如何最适合web开发中的人工智能?
  2. 在vi或vim上查找字符串
  3. 怎么用python处理excel文件-Python自动化如何处理excel文件数据
  4. element菜单默认展开和选中
  5. php微信获取mediaid超出限制_Python实现每日微信自动打卡
  6. 清北学堂培训2019.4.4
  7. 关于c语言循环的格式,关于for循环的格式
  8. Zend Framework实例教程
  9. pid控制从入门到精通pdf_《PID整定指导》白皮书——PID领域的葵花宝典来袭!
  10. Sublime 编译器-安装插件
  11. 【跃迁之路】【648天】程序员高效学习方法论探索系列(实验阶段405-2018.11.21)...
  12. 把php文件全改为html文件,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
  13. 计算机音乐的制作流程,Premiere制作音乐电子相册的方法和流程 计算机类数媒...
  14. 粒子滤波(PF)原理详解
  15. 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
  16. 关于PS的一些常用技巧
  17. linux 文件名 自动补全,用Linux自动补全怎么补全命令?
  18. 移动硬盘变为raw格式时,如何进行数据恢复
  19. 'MPD' object has no attribute 'myIP'
  20. 张铁林的十年英国留学生涯

热门文章

  1. 密码学入门(7):数字签名和证书
  2. 管理计算机的浏览器怎么删,怎样卸载ie?高手教你怎么卸载ie浏览器Internet Explorer...
  3. 安装移动视频监控 即时监控地铁车厢
  4. php 支付宝用户信息授权,支付宝登录获取用户信息授权
  5. python画卡通兔子_卡通兔子的建模教程(完成整个图形曲面的创建)
  6. 史上最全的常用iOS的第三方框架
  7. [国家集训队]跳跳棋
  8. 双电机智能小车装配教程(海灵智电)
  9. 统一身份认证(CAS)中文文档 请多指教
  10. Facebook登录的时候验证邮箱