又一期实战教程来了,本次实战教你创建一个粒子魔术效果,跟着我做,包你也能学会和理解。

当谈到运动和动画时,可能没有什么比粒子更让我喜欢了,这就是为什么每次我探索新技术时,我总是以尽可能多的创建粒子来演示。

在本文中,单击按钮时,我们将使用Web Animations API创建烟花效果,从而制作更多的粒子魔术。

效果如下

本文演示和完整代码已经放在我的博客小码页面

让我们开始吧!

浏览器支持

在我撰写本文时,除了Safari和Internet Explorer(IE是全民公敌、Safari是新时代的IE)之外,所有主流浏览器至少部分支持Web动画API。Safari支持可以在“实验性特性”开发人员菜单中启用。

这个浏览器支持的数据来自Caniuse。数字表示浏览器支持该版本及以上的功能。

HTML设置

该演示不需要太多的HTML,我们将使用一个 元素,但它可以是另一种类型的标签元素。如果我们真的想的话,我们甚至可以听到页面上的任何点击声,让粒子从任何地方弹出。

Click on me

CSS设置

由于每个粒子都有一些共同的CSS属性,我们可以在页面的全局CSS中设置它们。因为您可以在HTML中创建自定义标签元素,所以我将使用 标签名称来避免使用语义标签。但事实是,您可以为

或您选择的任何标记设置动画。

particle {

border-radius: 50%;

left: 0;

pointer-events: none;

position: fixed;

top: 0;

}

这里要注意几件事:

粒子不应与页面布局相互作用,因此我们设置了一个 fixed 位置,top 和 left 分别为 0px。

我们还将删除指针事件,以避免HTML粒子在屏幕上时与用户的任何交互。

因为样式化按钮和页面布局并不是本文的真正目的,所以我将把它放在一边。

JavaScript设置

这是我们将在JavaScript中执行的六个步骤:

监听按钮上的点击事件

创建30个 元素并将其附加到

为每个粒子设置随机的宽度,高度和背景

使每个粒子淡出时,将其从鼠标位置动画化到随机位置

动画完成后,从DOM中删除

步骤1:点击事件

// 我们首先检查浏览器是否支持Web Animations API

if (document.body.animate) {

// 如果支持,我们在按钮上添加一个点击监听器

document.querySelector('#button').addEventListener('click', pop);

}

步骤2:粒子

// 每次点击都会调用 pop() 函数

function pop(e) {

// 循环一次生成30个粒子

for (let i = 0; i < 30; i++) {

// 我们将鼠标坐标传递给 createParticle() 函数

createParticle(e.clientX, e.clientY);

}

}

function createParticle(x, y) {

// 创建自定义粒子元素

const particle = document.createElement('particle');

// 将元素添加道body中

document.body.appendChild(particle);

}

步骤3:粒子宽度,高度和背景

function createParticle (x, y) {

// [...]

// 计算从5px到25px的随机大小

const size = Math.floor(Math.random() * 20 + 5);

// 将大小应用于每个粒子

particle.style.width = `${size}px`;

particle.style.height = `${size}px`;

// 在蓝色/紫色调色板中生成随机颜色

particle.style.background = `hsl(${Math.random() * 90 + 180}, 70%, 60%)`;

}

步骤4:为每个粒子添加动画

function createParticle (x, y) {

// [...]

// 在距离鼠标75像素的范围内生成随机的x和y目标

const destinationX = x + (Math.random() - 0.5) * 2 * 75;

const destinationY = y + (Math.random() - 0.5) * 2 * 75;

// 将动画存储在变量中,因为稍后我们将需要它

const animation = particle.animate([

{

// 设置粒子的原点位置

// 我们将粒子偏移一半大小,以使其围绕鼠标居中

transform: `translate(${x - (size / 2)}px, ${y - (size / 2)}px)`,

opacity: 1

},

{

// 我们将最终坐标定义为第二个关键帧

transform: `translate(${destinationX}px, ${destinationY}px)`,

opacity: 0

}

], {

// 将随机持续时间设置为500到1500ms

duration: 500 + Math.random() * 1000,

easing: 'cubic-bezier(0, .9, .57, 1)',

// 将每个粒子延迟从0ms到200ms的随机值

delay: Math.random() * 200

});

}

因为我们有一个随机的延迟,所以等待开始动画的粒子在屏幕的左上角可见,为了防止这种情况,我们可以在全局CSS中为每个粒子设置零不透明度。

particle {

/* 和之前的一样 */

opacity: 0;

}

步骤5:动画完成后删除粒子

从DOM中删除粒子元素很重要,因为我们每次点击都会创建30个新元素,所以浏览器的内存很快就会被填满,导致出现问题。我们可以这样做:

function createParticle (x, y) {

// 和前面的相同

// 动画结束后,从DOM中删除元素

animation.onfinish = () => {

particle.remove();

};

}

最终结果

把前面所说的所有的代码整合在一起,我们就得到了我们想要的:一个丰富多彩的粒子爆炸效果。

发挥创造力

因为所有这些都是使用CSS,所以修改粒子样式非常简单,下面这五个使用各种形状甚至字符的示例!

如果对你有所启发和帮助,可以点个关注、收藏,也可以留言讨论,这是对作者的最大鼓励

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

python制作的炫酷动画_【实战】这个炫酷的播放粒子效果,你也可以学会!使用Web动画API制作...相关推荐

  1. 易语言制作计算软件简单步骤_视频解说不想自己录,用什么简单好用的配音软件制作?...

    原标题:视频解说不想自己录,用什么简单好用的配音软件制作? 最近经常听到一些朋友都在问, 怎么给视频配音,有什么简单好用的工具推荐,我总结了一些方法,希望对各位有所帮助,话不多说,请往下看. 定位要解 ...

  2. java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码

    原标题:程序员20分钟搞定粒子效果, 仅仅200行代码 这粒子的打造,确实没有布局代码,稍后大家在源码上可以看到,css代码都只有几行,绝大部分代码都是java代码,而且是原生java书写的,现在很多 ...

  3. 用python画的炫酷图形_推荐一个炫酷Python 手绘图形库

    https://github.com/chenjiandongx/cutecharts 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts.和 Matplotlib . ...

  4. python界面如何设置成黑色_实战!在Python中制作精美的图形用户界面

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是自带的默认样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样 ...

  5. python画一个祝福别人生日快乐_还在送生日贺卡?试试为家人朋友创作一个生日动画短视频吧...

    最近有很多小伙伴问我要怎么做生日祝福视频,既然是祝福,走心是最重要的了,要准备生日祝福语(最简单的就是那句"生日快乐"),要准备一些幸福样子的照片(记得修图),当然还要准备一些小礼 ...

  6. python f.write 保存图片到路径_实战 | Python批量提取Win10锁屏壁纸

    实战 | Python批量提取Win10锁屏壁纸 使用Win10的朋友会发现,每次开机锁屏界面都会有不一样的漂亮图片,这些图片通常选自优秀的摄影作品,十分精美. 但是由于系统会自动更换这些图片,所以就 ...

  7. html打开网页过场动画_音视频格式转换神器与html视频元素加字幕——零基础自学网页制作

    音视频格式转换神器--格式工厂 如果您下载了上一篇<为HTML页面添加音频.视频的方法--零基础自学网页制作>(目录在结尾)中的素材,您会看到有这样一个文件,如图 这就是格式工厂软件的安装 ...

  8. canvas 擦除动画_用HTML5 Canvas 做擦除及扩散效果

    2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...

  9. html打开网页过场动画_快来!这里有5分钟看完马上学会的HTML基础大全

    很多人会问做运营为什么我要了解前端HTML.首先做运营最主要的是做各种活动,做活动自然要面对客户,当然要能设计页面,做设计当然要懂页面技术 HTML了,所谓技多不压身,而且在这个快节奏的时代,掌握的技 ...

  10. python实现微信朋友圈点赞_使用vue做类似于微信点赞的效果?

    遇到这么个问题: 如图: 多条朋友圈,当我点赞时,当前的这条朋友圈给我追加用户,点赞数量也相应地增加,再次点击点赞时就是取消点赞也就相应地删除这个点赞用户名字,点赞数量也相应减少. 这个该怎么做呀?? ...

最新文章

  1. 一个免费分享绘图代码的网站
  2. day38--MySQL基础二
  3. Linux内核的整体架构介绍
  4. 用MySQL创建数据库和数据库表
  5. JUNIPER SRX Ipsec ××× 点对点Policy base ×××连接测试
  6. 好久没弄数学了,一本书上出现了,应该是指代了什么意思,问下.
  7. Pose Get的区别
  8. python 改文件名字_【Python】按要求修改文件名
  9. 萌豆工作室《用户许可协议》
  10. MySQL MGR实现分析 - 成员管理与故障恢复实现
  11. Microsoft Visio2019安装+解码(无需破-解-码)
  12. 接口测试加密解密以及接口签名sign原理
  13. 中兴盒子B860AV2.1-A-B-M-U,通刷,线刷刷机固件
  14. python简单的购物程序代码打折_Python进阶之路——简单购物代码
  15. macpro如何清理磁盘空间_在MacBook上,释放磁盘空间的7种方法
  16. spoj COT COT2
  17. 你见过马化腾18年前编写的代码吗?
  18. dynamicCondition v3.0.6 插件新增下拉树编辑器
  19. 【返老还童】大脑衰老可逆转,只需注入年轻脑脊液 From Nature
  20. 乐固加固APP后无法启动

热门文章

  1. java压缩图片工具类Thumbnailator
  2. 养老院管理系统如何开发详解
  3. 编写一个程序,给出汉字“你” “我” “他”在Unicode表中的位置
  4. ORL 人脸库 BP神经网络人脸识别
  5. 冒泡排序算法之C语言实现
  6. 使用SQLyog创建MySQL数据库
  7. 四川省大学生计算机作品大赛,我校学子在2019“新华三杯”四川省大学生计算机作品大赛中获奖20项...
  8. 火车售票系统html模板,火车售票系统设计
  9. Java硬核福利,实战虚拟机+Springboot+缓存,java电子书教材下载
  10. TCP/IP概念及基础网络配置