html、css、js粒子特效——前端

看看效果图

首先是html结构
使用canvas设置一个画布

<canvas width="500px" height="500px" id="content">您的浏览器版本过低,请升级浏览器!</canvas>

下面是js
背景粒子`

et items = document.getElementsByTagName('li')let bg = document.getElementById('bg')for (let i = 0; i < items.length; i++) {let r = parseInt(Math.random() * 30)let u = parseInt(Math.random() * 10 + 6)let e = Math.random()items[i].style.left = r * bg.offsetWidth / 30 + 'px'items[i].style.animationDelay = e * 20 + 's'items[i].style.animationDuration = u * 2 + 's'}

获取画布

var canvas = document.querySelector("#content");var context = canvas.getContext("2d");// 动画展示范围var w = 500,h = 500;// 封装函数工具// 画点function drawCircle(x, y, r, color) {// context.beginPath();context.fillStyle = color;context.arc(x, y, r, Math.PI / 180 * 0, Math.PI / 180 * 360);context.fill();}// 画粒子的图像和方法class ball {constructor(dx, dy) {// 从随机位置向dx,dy移动,速度由time决定 this.x = range(w);this.y = range(h)// 目标点坐标this.dx = dx;this.dy = dy;// 总距离this.initialX = this.dx - this.xthis.initialY = this.dy - this.y// 时间this.time = 100// 粒子半径和颜色this.r = 1.5;this.color = colorR();}

画出粒子的轨迹

 draw(count) {// 后面是速度方程 时间单位为1// this.x += this.initialX /100;// this.y += this.initialY /100;this.x += this.initialX * 2 / this.time * (1 - count / this.time);this.y += this.initialY * 2 / this.time * (1 - count / this.time);drawCircle(this.x, this.y, this.r, this.color);}}

设置随机数、随机颜色、筛选粒子位置、筛选有效像素点

/ 生成随机数function range(i) {return Math.random() * i;}function intR(i) {return Math.floor(Math.random() * i)}// 随机颜色function colorR() {let key = range(1)if (key > 0.3) {return '#fff'} else return '#838383'}// 筛选粒子位置function getImgData(img) {context.clearRect(0, 0, w, h);context.drawImage(img, 0, 0, 500, 500);var copy = context.getImageData(0, 0, 500, 500); // 获取像素点数据            img.ballArr = [];// 筛选有效像素点context.clearRect(0, 0, w, h);for (var y = 0; y < h; y += 8) {for (var x = 0; x < w; x += 8) {// 像素点的序号var index = x + y * w;// 帅选条件为透明度var a = copy.data[index * 4 + 3];if (a > 100) {// 符合条件条件的坐标绘制粒子let bal = new ball(x, y);img.ballArr.push(bal);// bal.draw();};}}}

动画部分

/ 设置动画function animateBall(img) {var count = 1;clearInterval(t1)t1 = setInterval(function () {// console.log(ballArr);context.clearRect(0, 0, w, h);for (var i = 0; i < img.ballArr.length; i++) {img.ballArr[i].draw(count);}if (count == 100) {clearInterval(t1);}count++;}, 30)}// 开始动画function start(a, b, t) {setTimeout(() => {relateTow(a, b)animateBall(a)}, 4000 * t)}//连接两个数组function relateTow(a, b) {for (let i = 0; i < a.ballArr.length; i++) {let v = intR(b.ballArr.length)a.ballArr[i].x = b.ballArr[v].dxa.ballArr[i].initialX = a.ballArr[i].dx - a.ballArr[i].xa.ballArr[i].y = b.ballArr[v].dya.ballArr[i].initialY = a.ballArr[i].dy - a.ballArr[i].y}}

绘图
绘图,这里要用img.onload,且所有的步骤都要写在里面,否则读取不到画布像素,值都为0

var img1 = new Image();var img2 = new Image();var img3 = new Image();var img4 = new Image();var img5 = new Image();var img6 = new Image();var img7 = new Image();img1.src = './images/e740e7973ba8559164ed75529ff6f946efd001fc.png@942w_942h_progressive.webp'img2.src = './images/916637ae86ff9365700b7f6cf13148e1a4282388.png@942w_942h_progressive.webp'img3.src = './images/22d926f0f1e11fb36a69d8393b3e6955448d0231.png@942w_942h_progressive.webp'img4.src = './images/3fe9d2cc6a26e765b04450eafedcccc50e7f3a95.png@942w_942h_progressive.webp'img5.src = './images/4a2271098cab8382a1d6bc39ceaa9cf6596fa42e.png@942w_942h_progressive.webp'img6.src = './images/a555d53276872ec8e04aae88cecda7ca50b2608d.png@942w_942h_progressive.webp'img7.src = './images/b5f7d2d2e1d84e998ce71be55e886d74fc7566b0.png@942w_942h_progressive.webp'

这里的图片全是我从网络中寻找的,大家可以自习替换成想要的

最后设置定时器,就算大功告成

var t1 //定时器// 获取所有的图形,粒子位置信息img1.onload = function () {getImgData(img1)}img2.onload = function () {getImgData(img2)}img3.onload = function () {getImgData(img3)}img4.onload = function () {getImgData(img4)}img5.onload = function () {getImgData(img5)}img6.onload = function () {getImgData(img6)}img7.onload = function () {getImgData(img7)}// 等待图片绘制后开始setTimeout(() => {const target = () => {start(img1, img7, 0)start(img2, img1, 1)start(img3, img2, 2)start(img4, img3, 3)start(img5, img4, 4)start(img6, img5, 5)start(img7, img6, 6)return target}setInterval(target(), 28000)}, 100)
}

至此,js部分结束

css样式表

* {margin: 0;padding: 0;
}body {position: relative;width: 100%;height: 100vh;overflow: hidden;
}#bg {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: rgb(44, 44, 44);display: flex;flex-direction: column;justify-content: center;align-items: center;}canvas {/* border: 1px solid #838383; */position: relative;top: -20px;display: block;}#lizi {position: absolute;width: 100%;height: 100vh;
}li {position: absolute;top: 105%;left: 0;width: 4px;height: 4px;background-color: rgb(253, 253, 253);border-radius: 50%;filter: blur(2px);list-style: none;animation: animate linear infinite;}@keyframes animate {0% {top: 100%;}100% {top: 0%;}
}#decrition {position: relative;width: 300px;height: 5px;border-radius: 50%;filter: blur(1px);background-color: rgb(49, 49, 49);animation: animate2 3.5s linear infinite;
}@keyframes animate2 {0% {background-color: rgb(49, 49, 49);}50% {background-color: rgb(119, 119, 119);}100% {background-color: rgb(49, 49, 49);}
}

大功告成

html、css、js粒子特效——前端相关推荐

  1. Three.js粒子特效,shader渲染初探

    这大概是个序 关于Three.js,网上有不多不少的零碎教程,有些过于初级,有些云里雾里,而Three.js官网上的示例逼格之高又令人望而却步,这些对于没学过计算机图形学的童鞋来说,就像入门迈槛不知先 ...

  2. 【html+css+js】用前端做一个视频播放器页面

    目录 介绍 HTML5 CSS3 JavaScript 效果图展示 介绍 学习前端两个星期后学到了很多,知道了html是制作网页的"骨架",css是制作好看的皮囊,js是让人动起来 ...

  3. particles.js粒子特效(常用登录页背景)

    1.效果图 2.js下载 particles.js开源地址:GitHub - VincentGarreau/particles.js: A lightweight JavaScript library ...

  4. html+css+js实现的前端模板

    代码功能 实现一个为用户提供能够快速制作主流表情包的网站.提供丰富的模板和在线自定义图片功能.可以对图片添加文字.水印和图片等功能.丰富的动画效果搭配颜值的前端模板,可以用来学习学习. 话不多说,上图 ...

  5. HTML/CSS/JS 鼠标特效二(鼠标点击WEB页面出现彩色爱心冒泡特效)

    1.实际效果 [青树柠檬~旧事老酒] 2.示例代码 /*--鼠标点击特效,不同颜色桃心图案*/ <script type="text/javascript">!func ...

  6. js粒子特效——particles

    链接:https://pan.baidu.com/s/1KqsZ5I8Qjz_J7ysQtw8tMw  提取码:qy38  1.下载并引入particles.js 2.<div class=&q ...

  7. 【浪漫气球——HTML CSS JS (特效+代码)】

    目录 效果 代码 效果 可以根据个人意愿再修改呀! 代码 index.html <!DOCTYPE html> <html><head>

  8. 手把手教你系列 - Particle粒子特效(完整代码部分)

    本着瞎折腾的学习态度,在闲暇之余就是要搞点奇奇怪怪的事情.文中如有哪不对的地方,还请大家指出. 本文项目github地址:https://github.com/SmallStoneSK/particl ...

  9. HTML+CSS+JS+LayUI—西湖 景区介绍网

    博客概要 简单分享基于前端技术制作完成的"西湖"景区介绍网~ 文章目录 博客概要 系统开发概要 简单需求分析 功能性需求 非功能性需求 页面设计 1.导航栏 2.首页 3.西湖故事 ...

最新文章

  1. 数据分析TB级别数据量大了怎么办,不会代码模型训练怎么办?
  2. 米斯特白帽培训讲义 工具篇 BruteXSS
  3. 买得起修不起?华为Mate X 5G维修价格公布:被吓到了
  4. linux周期执行某任务方法
  5. 华为智能手表WATCH GT2运动版和时尚版有什么区别?
  6. python画三维散点图-Python 绘制酷炫的三维图步骤详解
  7. 统计分析干货 | 秩和检验及其两两比较的思路与解析
  8. 树莓派安装win10
  9. 多边形的凹凸性判断及python实现
  10. Oracle 12c数据库坏块检查
  11. 关于Efficient Subgraph Matching by Postponing Cartesian的批注
  12. 一个在ns3平台基于UDP协议实现的拥塞控制仿真框架
  13. 网页加速之Chromium 预加载 Prerendering
  14. 组织架构与中台建设,回顾阿里小米京东美团四大商业巨头的战略变迁
  15. 学会“狼”的思维(一)
  16. 微信小程序九宫格抽奖
  17. android默认打开adb,android user 版本如何默认adb调试为打开(示例代码)
  18. 海康摄像头二次开发详解,包含海康摄像头登录、海康云台控制、视频下载等功能
  19. python新冠病毒COVID-19数据分析和数据可视化
  20. sdut-循环-7-统计正数和负数的个数(II)python

热门文章

  1. python中模拟浏览器抓取网页(-)
  2. 中年失业的处境有多艰难,成年人的生活不容易,且行且珍惜
  3. 用户画像标签体系及实现方法
  4. MySQL之SELECT函数
  5. linux系统程序问题报告,Linux程序设计实验报告.docx
  6. 网站微信支付时出现支付二维码不显示的解决方法
  7. DOS的建文件夹,移动图片,多级文件夹建立
  8. javaSwing ATM
  9. 移动硬盘读不出来的问题
  10. C++开发斗地主(QT)第三篇之动画发牌与位置计算