vue使用particle.js实现前端可交互的粒子效果(含代码)

首先我们需要一个实现效果的json文件。

在scr路径下的assets路劲下新建一个json文件,取名particles.json :

然后直接把下面这堆东西复制进去即可。

{
  "particles": {
    "number": {
      "value": 800,
      "density": {
        "enable": true,
        "value_area": 800
      }
    },
    "color": {
      "value": "#fff"
    },
    "shape": {
      "type": "circle",
      "stroke": {
        "width": 0,
        "color": "#000000"
      },
      "polygon": {
        "nb_sides": 6
      },
      "image": {
        "src": "img/github.svg",
        "width": 100,
        "height": 100
      }
    },
    "opacity": {
      "value": 0.5,
      "random": false,
      "anim": {
        "enable": false,
        "speed": 1,
        "opacity_min": 0.05,
        "sync": false
      }
    },
    "size": {
      "value": 4,
      "random": true,
      "anim": {
        "enable": false,
        "speed": 10,
        "size_min": 0.05,
        "sync": false
      }
    },
    "line_linked": {
      "enable": false,
      "distance": 150,
      "color": "#ffffff",
      "opacity": 0.4,
      "width": 1
    },
    "move": {
      "enable": true,
      "speed": 2,
      "direction": "bottom",
      "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": "push"
      },
      "onclick": {
        "enable": true,
        "mode": "repulse"
      },
      "resize": true
    },
    "modes": {
      "grab": {
        "distance": 140,
        "line_linked": {
          "opacity": 1
        }
      },
      "bubble": {
        "distance": 100,
        "size": 4,
        "duration": 2,
        "opacity": 8,
        "speed": 3
      },
      "repulse": {
        "distance": 160,
        "duration": 0.4
      },
      "push": {
        "particles_nb": 10
      },
      "remove": {
        "particles_nb": 2
      }
    }
  },
  "retina_detect": true
}

然后下载安装一下particles.js:

npm install particles.js

package.json中出现版本号即为安装成功:

 

然后我们在需要这个可交互背景的界面引入:

import particlesJson from '../../assets/particles.json'

路径一定要写对哦,路径错了界面就会出不来。 

 然后在mounted方法中进行调用:

    require('particles.js')
// eslint-disable-next-line no-undef
    particlesJS('particles', particlesJson);

 ps:这三行都需要,少了任何一行都不行哦。

然后在上面的template标签中添加一个id=particles的div即可:

<div id="particles"></div>

然后界面内的东西放在这个div里面就可以了。至此已经全部完成。我们看一下效果

 鼠标点击会有雪花躲避鼠标的样式出现,当然是可以自己diy的,只需要直接修改json文件中的value即可,具体需要按照自己的要求去自定义修改,可参考:

键值参数选项/ 说明实例
particles.number.valuenumber   数量40
particles.number.density.enableboolean   true / false
particles.number.density.value_areanumber   区域散布密度大小800
particles.color.value

HEX (string) 
RGB (object) 
HSL (object) 
array selection (HEX) 
random (string)

原子的颜色

"#b61924" 
{r:182, g:25, b:36} 
{h:356, s:76, l:41} 
["#b61924", "#333333", "999999"] 
"random"
particles.shape.typestring 
array selection 原子的形状
"circle" 
"edge" 
"triangle" 
"polygon" 
"star" 
"image" 
["circle", "triangle", "image"]
particles.shape.stroke.widthnumber      原理的宽度2
particles.shape.stroke.colorHEX (string)  原子颜色"#222222"
particles.shape.polygon.nb_slidesnumber       原子的多边形边数5
particles.shape.image.srcpath link 
svg / png / gif / jpg  原子的图片可以使用自定义图片
"assets/img/yop.svg" 
"http://mywebsite.com/assets/img/yop.png"
particles.shape.image.widthnumber 
(for aspect ratio)    图片宽度
100
particles.shape.image.heightnumber 
(for aspect ratio) 图片高度
100
particles.opacity.valuenumber (0 to 1)   不透明度0.75
particles.opacity.randomboolean     随机不透明度true / false
particles.opacity.anim.enableboolean            渐变动画true / false
particles.opacity.anim.speednumber            渐变动画速度3
particles.opacity.anim.opacity_minnumber (0 to 1)       渐变动画不透明度0.25
particles.opacity.anim.syncbooleantrue / false
particles.size.valuenumber       原子大小20
particles.size.randomboolean       原子大小随机true / false
particles.size.anim.enableboolean      原子渐变true / false
particles.size.anim.speednumber     原子渐变速度3
particles.size.anim.size_minnumber0.25
particles.size.anim.syncbooleantrue / false
particles.line_linked.enableboolean       连接线true / false
particles.line_linked.distancenumber       连接线距离150
particles.line_linked.colorHEX (string)   连接线颜色#ffffff
particles.line_linked.opacitynumber (0 to 1)    连接线不透明度0.5
particles.line_linked.widthnumber     连接线的宽度1.5
particles.move.enableboolean     原子移动true / false
particles.move.speednumber     原子移动速度4
particles.move.directionstring              原子移动方向"none" 
"top" 
"top-right" 
"right" 
"bottom-right" 
"bottom" 
"bottom-left" 
"left" 
"top-left"
particles.move.randomboolean              移动随机方向true / false
particles.move.straightboolean              直接移动true / false
particles.move.out_modestring  
(out of canvas)        是否移动出画布
"out" 
"bounce"
particles.move.bounceboolean 
(between particles)   是否跳动移动
true / false
particles.move.attract.enableboolean           原子之间吸引true / false
particles.move.attract.rotateXnumber   原子之间吸引X水平距离3000
particles.move.attract.rotateYnumber  y垂直距离1500
interactivity.detect_onstring        原子之间互动检测"canvas", "window"
interactivity.events.onhover.enableboolean    悬停true / false
interactivity.events.onhover.mode

string 
array selection

悬停模式 

"grab"     抓取临近的
"bubble"  泡沫球效果
"repulse"  击退效果
["grab", "bubble"]
interactivity.events.onclick.enableboolean  点击效果true / false
interactivity.events.onclick.mode

string 
array selection

点击效果模式

"push" 
"remove" 
"bubble" 
"repulse" 
["push", "repulse"]
interactivity.events.resizeboolean         互动事件调整true / false
interactivity.events.modes.grab.distancenumber        原子互动抓取距离100
interactivity.events.modes.grab.line_linked.opacitynumber (0 to 1)        原子互动抓取距离连线不透明度0.75
interactivity.events.modes.bubble.distancenumber       原子抓取泡沫效果之间的距离100
interactivity.events.modes.bubble.sizenumber       原子抓取泡沫效果之间的大小40
interactivity.events.modes.bubble.durationnumber    原子抓取泡沫效果之间的持续事件
(second)
0.4
interactivity.events.modes.repulse.distancenumber       击退效果距离200
interactivity.events.modes.repulse.durationnumber      击退效果持续事件
(second)
1.2
interactivity.events.modes.push.particles_nbnumber         粒子推出的数量4
interactivity.events.modes.push.particles_nbnumber4
retina_detectbooleantrue / false
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Vue.js 实现云盘前端交互可以按照以下步骤进行: 1. 创建 Vue 实例:在 HTML 文件中引入 Vue.js,并创建一个 Vue 实例作为整个应用的入口。 ```html <!DOCTYPE html> <html> <head> <title>Cloud Storage App</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <!-- Your app content goes here --> </div> <script> new Vue({ el: "#app", // Your Vue app options go here }); </script> </body> </html> ``` 2. 定义数据和方法:在 Vue 实例的 `data` 属性中定义云盘相关的数据,如文件列表、文件上传状态等。然后,在 `methods` 中定义处理用户交互的方法,如文件上传、文件下载等。 ```javascript new Vue({ el: "#app", data: { fileList: [], uploading: false, // Other data properties go here }, methods: { uploadFile() { // Handle file upload logic here }, downloadFile(file) { // Handle file download logic here }, // Other methods go here } }); ``` 3. 绑定数据和事件:在 Vue 实例对应的 HTML 模板中,使用指令和事件绑定来将数据和方法与用户界面进行交互。 ```html <div id="app"> <input type="file" @change="uploadFile"> <ul> <li v-for="file in fileList" :key="file.id"> {{ file.name }} <button @click="downloadFile(file)">Download</button> </li> </ul> </div> ``` 4. 发送异步请求:根据上传文件和下载文件的需求,使用 Vue.js 提供的异步请求库(如 Axios、Vue-resource 等)来与后端进行数据交互实现文件上传和下载功能。 ```javascript methods: { uploadFile(event) { this.uploading = true; var file = event.target.files[0]; var formData = new FormData(); formData.append("file", file); axios.post("/api/upload", formData) .then(response => { // Handle successful upload this.uploading = false; }) .catch(error => { // Handle upload error this.uploading = false; }); }, downloadFile(file) { axios.get(`/api/download/${file.id}`, { responseType: "blob" }) .then(response => { // Handle successful download var url = window.URL.createObjectURL(new Blob([response.data])); var link = document.createElement("a"); link.href = url; link.setAttribute("download", file.name); document.body.appendChild(link); link.click(); document.body.removeChild(link); }) .catch(error => { // Handle download error }); }, // Other methods go here } ``` 这只是一个简单的示例,具体的实现方式会根据您的需求和后端接口的设计而有所不同。您可以根据自己的情况进行适当的调整和扩展。同时,您还可以使用 Vue.js 提供的其他特性,如计算属性、组件化等来优化和拓展您的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值