手把手教你系列 - Particle粒子特效(下)

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


回顾

在上一篇文章中,我们简单地介绍了如何利用canvas来实现Particle粒子特效。通过把动画看作是不断地重复clear(), paint()这两步,我们只要把精力更多地关注在如何绘制每一帧画面即可。因此在上篇文章中,我们着重介绍了如何绘制画布上的运动中的粒子、粒子间的连线、以及粒子和鼠标的交互。那么在接下来的这篇文章中,我们将介绍如何优化、完善、改进现有的代码。其中,主要包括以下内容:

  • 粒子动效的参数可配置化
  • canvas自适应窗口大小
  • requestAnimationFrame代替setInterval
  • 缓存windowSize

粒子动效的参数可配置化

在之前的代码中,我们将粒子的一些属性都直接用硬编码写死了。如果要将这个ParticleEffect.js做成插件给别人用的话,其他人岂不是还要先看懂我们的代码?所以,我们需要把其中一些可配置的参数暴露出来,做到参数可配置化,方便使用的人自己定制想要的效果。

需要注意的是,我们需要有一个自己的默认保底配置。也就是说,如果用户没有传相应的配置时,粒子特效也能正常运行。而当用户配置了相应的参数时,我们就应该以新的配置为准。话不多说,具体实现看下面代码:

var ParticleEffect = {
    // ... 省去其他代码
    config: {
        count: 100,                     // 默认创建粒子数量
        radius: 5,                      // 默认粒子半径
        vxRange: [-1, 1],               // 默认粒子横向移动速度范围
        vyRange: [-1, 1],               // 默认粒子纵向移动速度范围
        scaleRange: [.5, 1],            // 默认粒子缩放比例范围
        lineLenThreshold: 125,          // 默认连线长度阈值
        color: 'rgba(255,255,255,.2)'   // 默认粒子、线条的颜色
    },
    init: function() {
   

        // ... 省去其他代码

        // 更新config配置
        var _this = this;
        newConfig && Object.keys(newConfig).forEach(function(key) {
   
            _this.config[key] = newConfig[key];
        });

        // 生成粒子
        var times = this.config.count;
        this.particles = [];
        while(times--) {
            this.particles.push(new Particle({
                x: Utils.rangeRandom(this.config.radius, windowSize.width - this.config.radius),
                y: Utils.rangeRandom(this.config.radius, windowSize.height - this.config.radius),
                vx: Utils.rangeRandom(this.config.vxRange[0], this.config.vxRange[1]),
                vy: Utils.rangeRandom(this.config.vyRange[0], this.config.vyRange[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值