為了提高頁面展示效果,登錄界面內容比較單一的,粒子效果作為背景經常使用到,vue工程中利用vue-particles可以很簡單的實現頁面的粒子背景效果。單擊鼠標時,可以添加粒子。
填坑:
- 以背景方式顯示,無法觸犯點擊事件
- 視圖有按鈕時無法獲取按鈕焦點,觸發不了點擊事件
動圖
實現過程
安裝vue-particles
npm install vue-particles --save-dev
全局配置vue-particles
在main.js里面:
import VueParticles from 'vue-particles' Vue.use(VueParticles)
使用 vue-particles
在vue文件template標簽中:
<template > <div v-loading.fullscreen.lock="loading" class="login" element-loading-spinner="fa fa-spinner fa-pulse fa-3x fa-fw"> <vue-particles color="#409EFF" :particleOpacity="0.7" :particlesNumber="80" shapeType="circle" :particleSize="4" linesColor="#409EFF" :linesWidth="1" :lineLinked="true" :lineOpacity="0.4" :linesDistance="150" :moveSpeed="3" :hoverEffect="true" hoverMode="grab" :clickEffect="true" clickMode="push" > </vue-particles> <el-form :rules="rules" :model="loginFrom" class="logContainer" ref="loginFrom" @keydown.enter.native="loginSubmit"> <h2 class="logtitle"><i class="fa fa-drupal fa-2x" style="color: #505458" /> 人 事 管 理</h2> <el-form-item prop="username"> <el-input type="text" v-model="loginFrom.username" placeholder="請輸入用戶名" class="inputbg" auto-complete="off"> <i slot="prefix" class="el-icon-user"></i> </el-input> </el-form-item> <el-form-item prop="password"> <el-input type="password" v-model="loginFrom.password" placeholder="請輸入密碼" auto-complete="off"> <i slot="prefix" class="el-icon-lock"></i> </el-input> </el-form-item> <el-form-item prop="code"> <el-input v-model="loginFrom.code" auto-complete="off" placeholder="驗證碼" style="width: 63%" @keyup.enter.native="loginSubmit"> <i slot="prefix" class="el-icon-view"></i> </el-input> <div class="login-code"> <img :src="codeUrl" @click="getCode"> </div> </el-form-item> <el-checkbox v-model="loginFrom.rememberMe" style="margin:0 0 25px 0;"> 記住我 </el-checkbox> <el-button type="primary" style="width:100%; position: relative;" @click="loginSubmit">登錄</el-button> </el-form> </div> </template>
vue-particles有一個id為默認為particles-js,可以根據這個id來設置樣式。設置之后就可以顯示了。
#particles-js{
width: 100%;
height: calc(100% - 100px);
position: absolute;
}
坑一:我在做完這一步時,發現點擊按鈕觸發不了。
后來做了如下修改;加個樣式position: relative;,將button的定位寫出相對定位就OK啦,我也不知道啥原因,想着修改之前是好的,可能被position: absolute; 影響了,所以就一個個試position的屬性
<el-button type="primary" style="width:100%; position: relative;" @click="loginSubmit">登錄</el-button>
坑二,網上好多是直接在APP組件里,我試了之后,鼠標無法觸發粒子,感覺下面的寫法不對,或者我那里其他的問題。
<template> <div id="app" style="overflow-x: hidden"> <vue-particles color="#409EFF" :particleOpacity="0.9" :particlesNumber="1" shapeType="circle" :particleSize="4" linesColor="#409EFF" :linesWidth="1" :lineLinked="true" :lineOpacity="0.7" :linesDistance="150" :moveSpeed="4" :hoverEffect="true" hoverMode="grab" :clickEffect="true" clickMode="push"></vue-particles> <router-view></router-view> </div> </template> <script> export default { name: 'app', data () { return { } }, mounted:function() { this.$store.dispatch('initData'); this.$store.dispatch('initData'); }, } </script> <style lang="scss" scoped> #particles-js { width: 100%; height: calc(100% - 100px); position: absolute; overflow: hidden; } </style>
附:具體參數說明
- 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"。