美文网首页
vue中使用Particles.js做粒子效果

vue中使用Particles.js做粒子效果

作者: YellowPoint | 来源:发表于2019-12-11 14:21 被阅读0次

particles.js github地址 居然有20.5k厉害了;

一开始通过npm下载,但是其插件不支持 import模块化,就直接把js下载下来吧(min的23kb),少一个npm包文件

组件内引入 
import '@/utils/lib/particles.min.js' 
初始化,传入div的id和配置 
particlesJS('particles', config);

配置参考了这个 JS库之Particles.js中文开发手册及参数详解

遇到的问题

1.页面高度变化,但是其不会更新,直接拉伸画布,且该插件没有暴露更新的方法,又发现它会检测resize时更新,故在点击展开列表等影响页面高度变化的操作后,手动触发window 的resize事件

window.dispatchEvent( new Event('resize'));

2.切换页面的时候,不同页面高度不同,粒子画布会拉伸,此时是路由切换没有触发上面的事件,觉得引发页面高度变化的操作有很多,故想要直接监听dom的高度变化,然后更新画布,找到如下

下面为封装为vue组件的代码

<!-- 粒子效果组件 -->
<template>
  <transition name="fade2">
    <div
      class="VParticles"
      v-show="isShow"
    >
      <div id="particles"></div>
    </div>
  </transition>
</template>

<script>
import ResizeObserver from 'resize-observer-polyfill';
import EventBus from '@/utils/eventBus';
import '@/utils/lib/particles.min.js';
import particlesConfig from './particles.json';

export default {
  name: '',
  components: {

  },
  props: {

  },
  data() {
    return {
      isShow: true,
    };
  },
  computed: {

  },
  created() {

  },
  mounted() {
    this.init();
    this.change();
  },
  methods: {
    init(config = particlesConfig) {
      // eslint-disable-next-line no-undef
      particlesJS('particles', config);
    },
    change() {
      EventBus.$on('changeMine', (tableItem) => {
        if (this.$route.path != '/finance') { return; }
        this.isShow = false;
        const newConfig = this.$common.cloneDeep(particlesConfig);
        if (tableItem) {
          newConfig.particles.shape.image.src = tableItem.icon;
          newConfig.particles.shape.type = 'image';
          // 延时显示,是因为粒子画布在变化的时候会抖动拉扯
        }
        setTimeout(() => {
          this.init(newConfig);
          this.isShow = true;
        }, 300);
      });
      // 防抖一下
      const resize = this.$common.debounce(() => {
        window.dispatchEvent(new Event('resize'));
      }, 500);

      // 监听粒子画布的高度变化,变化后都要重新更新一次,否则会画布会拉伸
      const ro = new ResizeObserver((entries, observer) => {
        // 触发resize,让particles更新视图
        // 由于该插件没有暴露更新的方法,又发现它会检测resize,故这么做
        resize();
      });

      ro.observe(document.getElementById('particles'));
    },
  },
};
</script>

<style lang='less' scoped>
#particles {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 100;
  width: 100%;
  height: 100%;
  background-color: #f6f9fc;
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
}
.fade2-enter-active {
  transition: opacity 0.5s;
}
.fade2-enter {
  opacity: 0;
}
</style>

相关文章

  • vue中使用Particles.js做粒子效果

    particles.js github地址 居然有20.5k厉害了; 一开始通过npm下载,但是其插件不支持 im...

  • vue粒子效果

    粒子效果是一个很好玩很有趣的东西,前几天有人问我vue怎么使用粒子效果,其实vue使用一些简单粒子效果很容易,下面...

  • vue粒子效果

    粒子效果是一个很好玩很有趣的东西,前几天有人问我vue怎么使用粒子效果,其实vue使用一些简单粒子效果很容易,下面...

  • Vue项目使用particles.js粒子效果以及销毁

    最近在使用Vue+Element开发一个后台管理系统,想找一个好看点的素材当背景,突然找到particles.js...

  • particles.js粒子效果

    GitHub项目地址 效果美观,大方,轻盈。。。弹指间,一个粒子动画效果就完成了。 之前看到过不错的效果,总为浮云...

  • 在vue项目中使用炫酷的粒子动效

    直接看效果图,particles.js介绍就略了,一个轻量级,无依赖的javascript插件,用于粒子背景。原理...

  • 前端常用类库资源

    Javascript 库 Particles.js — 一个用来在 web 中创建炫酷的浮动粒子的库 Three....

  • Javascript 库

    Javascript 库 Particles.js — 一个用来在 web 中创建炫酷的浮动粒子的库 Three....

  • js 工具

    javaScript: Particles.js — 一个用来在 web 中创建炫酷的浮动粒子的库 Three.j...

  • 前端用库

    Javascript 库Particles.js— 一个用来在 web 中创建炫酷的浮动粒子的库Three.js ...

网友评论

      本文标题:vue中使用Particles.js做粒子效果

      本文链接:https://www.haomeiwen.com/subject/qwvogctx.html