美文网首页F2e踩坑之路vueVue项目
particles.js在vue上的运用

particles.js在vue上的运用

作者: 詹小云 | 来源:发表于2017-07-18 16:54 被阅读2471次

    知乎的首页后面的粒子动效总觉得很炫酷,搜了一下,发现是用particles.js编写的。刚好目前的项目是利用vue框架的,两个凑在一起学了。
    讲道理,这个用得好的话,页面是可以很酷的,譬如我现在写的项目

    酷酷的登录页

    嘻嘻~

    安装particles.js


    npm install --save particles.js
    

    配置particles.js


    1. template
      这个就是动态粒子要展示的位置。
    <div id="particles"></div>
    
    1. script
      因为涉及到dom树,所以必须在挂载结束后初始化particles.js。第一个参数id就是你在template上取得id名,像我要写的话就是particles。第二个参数是你的data存放的路径,个人建议使用相对路径。
    mounted(){
        particlesJS.load('id','path to your particles.data');
    }
    
    1. style
    #particles{
          position: absolute;
          width: 100%;
          height: 100%;
          background-color: #b61924;
          background-repeat: no-repeat;
          background-size: cover;
          background-position: 50% 50%;
    }
    

    讲到这里会发现,还有一个最重要的点没讲出来,恩,就是particles.js 的引入。当你的使用范围比较小时,可以直接在当前vue文件的script中引入,即

    //vue文件
    import particles from 'particles.js'
    

    又或者你觉得这样不好管理,一定要放在main文件中也可以

    //main文件
    import particles from 'particles.js'
    Vue.use(particles)
    
    1. particles.data
      这个data是用于控制粒子在页面中所呈现的状态,这个文件是自己新建的,建议放在静态资源文件夹里。通过修改里边的字段,来得到自己想要的效果。如修改particles.color.value 的值就是修改粒子的颜色;修改particle.shape就是修改粒子的外观。
    {
      "particles": {
        "number": {
          "value": 60,
          "density": {
            "enable": true,
            "value_area": 800
          }
        },
        "color": {
          "value": "#ffffff"
        },
        "shape": {
          "type": "circle",
          "stroke": {
            "width": 0,
            "color": "#000000"
          },
          "polygon": {
            "nb_sides": 5
          },
          "image": {
            "src": "img/github.svg",
            "width": 100,
            "height": 100
          }
        },
        "opacity": {
          "value": 0.5,
          "random": false,
          "anim": {
            "enable": false,
            "speed": 1,
            "opacity_min": 0.1,
            "sync": false
          }
        },
        "size": {
          "value": 3,
          "random": true,
          "anim": {
            "enable": false,
            "speed": 40,
            "size_min": 0.1,
            "sync": false
          }
        },
        "line_linked": {
          "enable": true,
          "distance": 150,
          "color": "#ffffff",
          "opacity": 0.4,
          "width": 1
        },
        "move": {
          "enable": true,
          "speed": 4,
          "direction": "none",
          "random": false,
          "straight": false,
          "out_mode": "out",
          "bounce": false,
          "attract": {
            "enable": false,
            "rotateX": 100,
            "rotateY": 1200
          }
        }
      },
      "interactivity": {
        "detect_on": "Window",
        "events": {
          "onhover": {
            "enable": true,
            "mode": "grab"
          },
          "onclick": {
            "enable": true,
            "mode": "push"
          },
          "resize": true
        },
        "modes": {
          "grab": {
            "distance": 140,
            "line_linked": {
              "opacity": 1
            }
          },
          "bubble": {
            "distance": 400,
            "size": 40,
            "duration": 2,
            "opacity": 8,
            "speed": 3
          },
          "repulse": {
            "distance": 200,
            "duration": 0.4
          },
          "push": {
            "particles_nb": 4
          },
          "remove": {
            "particles_nb": 2
          }
        }
      },
      "retina_detect": true
    }
    

    最后呈现的效果如下

    效果图

    嘻嘻,记录完了,可以把test文件删了。

    相关文章

      网友评论

      • 15cc20e7e6c2:为什么我这么使用之后rooter-view里面的内容就不显示了呢。。。
        <div id="app">
        <vue-particles
        color="#dedede"
        :particleOpacity="0.7"
        :particlesNumber="60"
        shapeType="circle"
        :particleSize="3"
        linesColor="#dedede"
        :linesWidth="0"
        :lineLinked="true"
        :lineOpacity="0.4"
        :linesDistance="150"
        :moveSpeed="3"
        :hoverEffect="true"
        hoverMode="grab"
        :clickEffect="true"
        clickMode="push"
        ></vue-particles>
        <router-view></router-view>
        </div>
        詹小云:@YQuite 那你可以用position叠加呀
        15cc20e7e6c2:不对,是显示在了那个特效的下方,怎么把它作为背景。。。
      • 李仁平:这个不兼容ie能解决吗
        詹小云:这个库本身是兼容的,应该是你项目有别的地方不兼容
      • 是否雪过了还依然窗未白:你好 我在引入自己的particles.json的时候返回的结果一直是首页的所有dom元素,怎么更改路径都是这个结果 请问有什么有效的办法吗
        詹小云:可以给我看下你的代码吗?
      • 人类进化又没带我:1.下载依赖

        npm install vue-particles --save-dev
        2.main.js引入

        import Vue from 'vue'
        import VueParticles from 'vue-particles'
        Vue.use(VueParticles)
        3.直接使用
        <vue-particles
        color="#dedede"
        :particleOpacity="0.7"
        :particlesNumber="80"
        shapeType="circle"
        :particleSize="4"
        linesColor="#dedede"
        :linesWidth="1"
        :lineLinked="true"
        :lineOpacity="0.4"
        :linesDistance="150"
        :moveSpeed="3"
        :hoverEffect="true"
        hoverMode="grab"
        :clickEffect="true"
        clickMode="push"
        >
        </vue-particles>
        复制代码
        4.属性含义
        color: String类型。默认'#dedede'。粒子颜色。
        particleOpacity: Number类型。默认0.7。粒子透明度。
        particlesNumber: Number类型。默认80。粒子数量。
        shapeType: String类型。默认'circle'。可用的粒子外观类型有:"circle","edge","triangle", "polygon","star"。
        particleSize: Number类型。默认80。单个粒子大小。
        linesColor: String类型。默认'#dedede'。线条颜色。
        linesWidth: Number类型。默认1。线条宽度。
        lineLinked: 布尔类型。默认true。连接线是否可用。
        lineOpacity: Number类型。默认0.4。线条透明度。
        linesDistance: Number类型。默认150。线条距离。
        moveSpeed: Number类型。默认3。粒子运动速度。
        hoverEffect: 布尔类型。默认true。是否有hover特效。
        hoverMode: String类型。默认true。可用的hover模式有: "grab", "repulse", "bubble"。
        clickEffect: 布尔类型。默认true。是否有click特效。
        clickMode: String类型。默认true。可用的click模式有: "push", "remove", "repulse", "bubble"
      • aa1eea241fe8:你好,我在使用particlesJS.load方法时获取配置json文件失败,请问是需要引入vue-resource或者axios吗?
        詹小云:不用的,他那个方法已经封装好了ajax的,你引用失败应该是没有起服务
      • goaegean:您好,import particles from 'particles.js'这样引入之后particles没有particlesJS方法啊
        景彡_5370:@goaegean 你好,我和你遇到一样的问题,怎么使用script-loader,方便说下么
        goaegean:@詹小云 是放在当前vue文件中的,我看了一下通过npm intsall安装的particles.js,它本身并不是模块化的开发方式啊,所以import进来还是空对象;最后我使用了script-loader在当前vue文件执行该模块以在浏览器里获取particlesJS作用域,再在当前组件mounted钩子函数中调用,也算是能正常使用了。我不知道您那是怎么起作用的?
        詹小云:你是放在当前vue文件还是main文件里边?如果是main文件,还需要加一句:Vue.use(particles)
      • 盼盼Degenenrate:mounted(){
        particlesJS.load('id','path to your particles.data');
        }
        这个后边的路径是node_modules里面那个particles.json的路径吗,我一直报错找不到这个
        错误Failed to load resource: the server responded with a status of 404 (Not Found)
        詹小云:不好意思啊,上次看错了,那个load方法里边的路劲是你自己新建的一个json,这个文件最好放在静态资源文件夹里。加载不出来的话,有两个原因,一是你地址写错了,二是你的网页没有放在服务器上。因为particles的load函数是用ajax加载的,无法请求file协议下的文件。
        詹小云:是的,放的就是json的路径,你应该是路径没写对
      • 多拉达克:能给我你登录页的背景图吗,星球那个
        詹小云:不好意思啊,这个是公司的人p的,我没办法给
      • zhoocoo:你好,我在vue中使用particleJS时,在跳转路由后,再进入这个页面,会导致页面卡顿,请问怎么解决呢?
        詹小云:这个库本身也不大呀,卡顿应该不会是particle造成的

      本文标题:particles.js在vue上的运用

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