canvas多彩粒子星空背景
HTML5 canvas 实现多颜色粒子星空页面背景,喜欢的可以收藏。自己可以定义颜色,粒子透明度,粒子数量,粒子大小。
预览效果图如下:
1.获取canvas上下文,并且动态设置canvas尺寸和屏幕大小一样。
- var canvas = document.getElementById('canvas')
- var viewW = window.innerWidth
- var viewH = window.innerHeight
- canvas.width = viewW
- canvas.height = viewH
- var ctx = canvas.getContext('2d')
- ctx.save()
2.定义粒子参数。
number: 粒子数量
maxDot: 粒子最大半径
array: 记录每个粒子的属性
- var dots = {
- number: ,
- maxDot: ,
- array: []
- }
3.定义别的参数。
isOne: 是否是第一次画
step: 每次运行的距离
- var isOne = true
- var step = 0.3
- var x =
- var y =
- var x1 =
- var y1 =
4.生成随机颜色。
- function generateRandomColors() {
- var color1 = Math.random() * || ,
- color2 = Math.random() * || ,
- color3 = Math.random() * || ,
- color4 = Math.random() * || 0.1;
- return `rgba(${color1},${color2},${color3},${color4})`
- }
5.画粒子和线条。
- function drawDots() {
- ctx.clearRect(, , viewW, viewH)
- ctx.fillStyle = '#000'
- ctx.fillRect(, , viewW, viewH)
- for (var i = ; i < dots.number; i++) {
- var dotR,
- dotX,
- dotY,
- dotC,
- dot_X = 0.3,
- dot_Y = ;
- if (isOne) {
- dotR = Math.round(Math.random() * dots.maxDot) || ;
- dotX = Math.round(Math.random() * viewW);
- dotY = Math.round(Math.random() * viewH);
- dotC = generateRandomColors();
- if (Math.round(Math.random()) == ) {
- dot_X = 0.3
- } else {
- dot_X = -0.3
- }
- if (Math.round(Math.random()) == ) {
- dot_Y = 0.3
- } else {
- dot_Y = -0.3
- }
- dots.array.push({
- dotR,
- dotX,
- dotY,
- dotC,
- dot_X,
- dot_Y
- })
- if (i == ) {
- x = dotX;
- y = dotY;
- }
- if (i == ) {
- x1 = dotX;
- y1 = dotY;
- }
- } else {
- if (dots.array[i].dotX + dots.array[i].dot_X > viewW) {
- dots.array[i].dot_X = -0.3
- }
- if (dots.array[i].dotX + dots.array[i].dot_X < ) {
- dots.array[i].dot_X = 0.3
- }
- if (dots.array[i].dotY + dots.array[i].dot_Y > viewH) {
- dots.array[i].dot_Y = -0.3
- }
- if (dots.array[i].dotY + dots.array[i].dot_Y < ) {
- dots.array[i].dot_Y = 0.3
- }
- dots.array[i].dotX += dots.array[i].dot_X
- dots.array[i].dotY += dots.array[i].dot_Y
- dotX = dots.array[i].dotX;
- dotY = dots.array[i].dotY;
- dotR = dots.array[i].dotR;
- dotC = dots.array[i].dotC;
- ctx.beginPath();
- ctx.fillStyle = dotC;
- ctx.arc(dotX, dotY, dotR, , Math.PI * );
- ctx.fill()
- if (Math.abs(x - dots.array[i].dotX) < && Math.abs(y - dots.array[i].dotY) < ) {
- ctx.strokeStyle = dotC
- ctx.moveTo(x, y)
- ctx.lineTo(dots.array[i].dotX, dots.array[i].dotY)
- ctx.stroke()
- }
- if (Math.abs(x1 - dots.array[i].dotX) < && Math.abs(y1 - dots.array[i].dotY) < ) {
- ctx.strokeStyle = dotC
- ctx.moveTo(x1, y1)
- ctx.lineTo(dots.array[i].dotX, dots.array[i].dotY)
- ctx.stroke()
- }
- }
- }
- if (isOne) {
- isOne = false
- }
- ctx.restore()
- requestAnimationFrame(drawDots)
- }
源码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>粒子</title>
- <style>
- * {
- padding: ;
- margin: ;
- overflow: hidden;
- }
- </style>
- </head>
- <body>
- <canvas id="canvas"></canvas>
- <script>
- var canvas = document.getElementById('canvas')
- var viewW = window.innerWidth
- var viewH = window.innerHeight
- canvas.width = viewW
- canvas.height = viewH
- var ctx = canvas.getContext('2d')
- ctx.save()
- // 原型粒子对象参数
- var dots = {
- number: ,
- maxDot: ,
- array: []
- }
- var isOne = true
- var step = 0.3
- var x =
- var y =
- var x1 =
- var y1 =
- drawDots()
- // 画粒子
- function drawDots() {
- ctx.clearRect(, , viewW, viewH)
- ctx.fillStyle = '#000'
- ctx.fillRect(, , viewW, viewH)
- for (var i = ; i < dots.number; i++) {
- var dotR,
- dotX,
- dotY,
- dotC,
- dot_X = 0.3,
- dot_Y = ;
- if (isOne) {
- dotR = Math.round(Math.random() * dots.maxDot) || ;
- dotX = Math.round(Math.random() * viewW);
- dotY = Math.round(Math.random() * viewH);
- dotC = generateRandomColors();
- if (Math.round(Math.random()) == ) {
- dot_X = 0.3
- } else {
- dot_X = -0.3
- }
- if (Math.round(Math.random()) == ) {
- dot_Y = 0.3
- } else {
- dot_Y = -0.3
- }
- dots.array.push({
- dotR,
- dotX,
- dotY,
- dotC,
- dot_X,
- dot_Y
- })
- if (i == ) {
- x = dotX;
- y = dotY;
- }
- if (i == ) {
- x1 = dotX;
- y1 = dotY;
- }
- } else {
- if (dots.array[i].dotX + dots.array[i].dot_X > viewW) {
- dots.array[i].dot_X = -0.3
- }
- if (dots.array[i].dotX + dots.array[i].dot_X < ) {
- dots.array[i].dot_X = 0.3
- }
- if (dots.array[i].dotY + dots.array[i].dot_Y > viewH) {
- dots.array[i].dot_Y = -0.3
- }
- if (dots.array[i].dotY + dots.array[i].dot_Y < ) {
- dots.array[i].dot_Y = 0.3
- }
- dots.array[i].dotX += dots.array[i].dot_X
- dots.array[i].dotY += dots.array[i].dot_Y
- dotX = dots.array[i].dotX;
- dotY = dots.array[i].dotY;
- dotR = dots.array[i].dotR;
- dotC = dots.array[i].dotC;
- ctx.beginPath();
- ctx.fillStyle = dotC;
- ctx.arc(dotX, dotY, dotR, , Math.PI * );
- ctx.fill()
- if (Math.abs(x - dots.array[i].dotX) < && Math.abs(y - dots.array[i].dotY) < ) {
- ctx.strokeStyle = dotC
- ctx.moveTo(x, y)
- ctx.lineTo(dots.array[i].dotX, dots.array[i].dotY)
- ctx.stroke()
- }
- if (Math.abs(x1 - dots.array[i].dotX) < && Math.abs(y1 - dots.array[i].dotY) < ) {
- ctx.strokeStyle = dotC
- ctx.moveTo(x1, y1)
- ctx.lineTo(dots.array[i].dotX, dots.array[i].dotY)
- ctx.stroke()
- }
- }
- }
- if (isOne) {
- isOne = false
- }
- ctx.restore()
- requestAnimationFrame(drawDots)
- }
- // 生成随机颜色
- function generateRandomColors() {
- var color1 = Math.random() * || ,
- color2 = Math.random() * || ,
- color3 = Math.random() * || ,
- color4 = Math.random() * || 0.1;
- return `rgba(${color1},${color2},${color3},${color4})`
- }
- </script>
- </body>
- </html>
canvas多彩粒子星空背景的更多相关文章
- canvas实现粒子星空连线
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>离 ...
- canvas星空背景特效+CSS旋转相册学习
今天在看帖子的时候,看到了个有趣的css旋转相册,刚好之前做了一个星空背景dome,这里给大家分享下代码: 旋转相册参考:https://blog.csdn.net/gitchatxiaomi/art ...
- 如何把canvas元素作为网站背景总结详解
如何把canvas元素作为网站背景总结详解 一.总结 一句话总结:最简单的做法是绝对定位并且z-index属性设置为负数. 1.如何把canvas元素作为网站背景的两种方法? a.设置层级(本例代码就 ...
- html5 canvas首屏自适应背景动画循环效果代码
模板描述:html5 canvas首屏自适应背景动画循环效果代码 由于动态图太大,怕以后服务器受不了,所以现在都改为静态图了,大家点击演示地址一样的,希望大家喜欢,你们的支持就是小海的动力!! 欢迎大 ...
- 弄个知乎的粒子动态背景_实践particles.js
好久没登录知乎,发现他们的登录页面粒子动态效果蛮炫的,查一下代码用了Particles.js基于Canvas画布创建粒子颗粒效果. 上图 上图: 感觉有比格,就照着弄了一个,玩玩. githu ...
- canvas绘制经典星空连线效果
来自:https://segmentfault.com/a/1190000009675230 下面开始coding:先写个canvas标签 <canvas height="620&qu ...
- HTML5 <Canvas>文字粒子化
文字粒子化,额或者叫小圆圈化... 1 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...
- canvas放射粒子效果
这个也是别人的代码,就不多介绍了 写了些注释 body { overflow:hidden; margin:0; padding:0; background-color:#222222 } </ ...
- 用Canvas为网页加入动态背景
近期刚刚接到为微信公众帐号"玩转三里屯"制作首页的任务. 考虑到页面仅仅在手机中浏览.并且手机对canvas的支持又很好,所以打算使用canvas做点不一样的动画. 首先来看下效果 ...
随机推荐
- WinRAR 5.50 简体中文正式版发布(20多项改进)
感谢ikimi的投递 流行好用的压缩工具,支持鼠标拖放及外壳扩展,完美支持 ZIP 档案,内置程序可以解开 CAB.ARJ.LZH.TAR.GZ.ACE.UUE.BZ2.JAR.ISO 等多种类型的压 ...
- 各种Message中文解释(一部分)
函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一. 函数原型:LRESUL ...
- WPF 悬浮键盘
原文:WPF 悬浮键盘 public class TouchScreenKeyboard : Window { #region Property & Variable & Constr ...
- git/github初级运用自如 (good)
三 . 设置用户信息 这一步不是很重要,貌似不设置也行,但github官方步骤中有,所以这里也提一下. 在git中设置用户名,邮箱 $ git config --global user.name &q ...
- Motion Paths in WPF 4 using Expression Blend 4
原文 Motion Paths in WPF 4 using Expression Blend 4 Posted by: Pravinkumar Dabade , on 3/19/2011, in C ...
- Win8Metro(C#)数字图像处理--2.4图像颜色聚类
原文:Win8Metro(C#)数字图像处理--2.4图像颜色聚类 [函数名称] 图像颜色聚类函数ClusterProcess(WriteableBitmap src,int value) [算 ...
- android 获取 cpu 频率信息
cpu的频率信息可以在/sys/devices/system/cpu/cpu0/cpufreq/路径下读取 比如最高频率路径为:/sys/devices/system/cpu/cpu0/cpufreq ...
- Android零基础入门第13节:Android Studio配置优化,打造开发利器
原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装 ...
- 将QT开发的界面程序封装成DLL,在VC中成功调用(必须有消息循环,所以使用了QTWinmigrate,附CSDN可下载的Demo)
最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...
- 使用SqlSugar封装的数据层基类
首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...