上の画像の点と線は、Vue-Particleによって生成されます。Vue-Particleは、それ自体で移動するだけでなく、ユーザーのマウスと相互作用します。例のスタイルは少し醜いので、それを見てみましょう。
1.チュートリアル
1.1インストール
npm install vue-particles --save-dev
1.2main.jsファイルを紹介します
import Vue from 'vue'
import VueParticles from 'vue-particles'
Vue.use(VueParticles)
1.3使用
<template>
<div id="app">
<vue-particles
class="login-background"
color="#97D0F2"
:particleOpacity="0.7"
:particlesNumber="50"
shapeType="circle"
:particleSize="4"
linesColor="#97D0F2"
:linesWidth="1"
:lineLinked="true"
:lineOpacity="0.4"
:linesDistance="150"
:moveSpeed="3"
:hoverEffect="true"
hoverMode="grab"
:clickEffect="true"
clickMode="push">
</vue-particles>
</div>
</template>
1.4パラメータの説明
- 色:文字列型。デフォルトは「#dedede」です。粒子の色。
- particleOpacity:数値タイプ。デフォルトは0.7です。粒子の透明性。
- particlesNumber:数値タイプ。デフォルトは80です。粒子の数。
- shapeType:文字列型。デフォルトは「circle」です。使用可能なパーティクルの外観タイプは、「円」、「エッジ」、「三角形」、「ポリゴン」、「スター」です。
- particleSize:数値タイプ。デフォルトは80です。単一粒子のサイズ。
- linesColor:文字列型。デフォルトは「#dedede」です。線の色。
- linesWidth:数値タイプ。デフォルトは1です。線幅。
- lineLinked:ブール型。デフォルトはtrueです。接続回線が利用可能かどうか。
- lineOpacity:数値タイプ。デフォルトは0.4です。線の透明度。
- linesDistance:数値タイプ。デフォルトは150です。線の距離。
- moveSpeed:数値タイプ。デフォルトは3です。粒子の移動速度。
- hoverEffect:ブール型。デフォルトはtrueです。ホバー特殊効果はありますか?
- hoverMode:文字列型。デフォルトはtrueです。使用可能なホバーモードは、「グラブ」、「リパルス」、「バブル」です。
- clickEffect:ブール型。デフォルトはtrueです。クリック特殊効果はありますか?
- clickMode:文字列型。デフォルトはtrueです。使用可能なクリックモードは、「プッシュ」、「削除」、「リパルス」、「バブル」です。
1.5注意
ログインページの完全なコードはここに添付されており、オンデマンドで入手できます。
カバーされた背景画面は、幅と高さを100%に設定する必要があります。
<template>
<div>
<!-- #707070 -->
<vue-particles
class="login-background"
color="#97D0F2"
:particleOpacity="0.7"
:particlesNumber="50"
shapeType="circle"
:particleSize="4"
linesColor="#97D0F2"
:linesWidth="1"
:lineLinked="true"
:lineOpacity="0.4"
:linesDistance="150"
:moveSpeed="3"
:hoverEffect="true"
hoverMode="grab"
:clickEffect="true"
clickMode="push">
</vue-particles>
<div class="login-other">
<el-form :rules="rules" ref="loginForm" :model="loginForm" class="loginContainer">
<H3 class="loginTitle">人事管理系统</H3>
<el-form-item prop="username">
<el-input prefix-icon="el-icon-user-solid" size="normal" type="text" v-model="loginForm.username"
auto-complete="off"
placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input prefix-icon="el-icon-lock" size="normal" type="password" v-model="loginForm.password"
auto-complete="off"
placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item prop="code">
<div style="display: flex;justify-content: space-between">
<el-input prefix-icon="el-icon-circle-check" style="width: 230px" size="normal" type="text"
v-model="loginForm.code" auto-complete="off"
placeholder="请输入验证码" @keydown.enter.native="submitLogin">
</el-input>
<img :src="vcUrl" @click="updateVerifyCode">
</div>
</el-form-item>
<el-checkbox size="normal" class="loginRemember" v-model="checked">记住密码</el-checkbox>
<el-button size="normal" type="primary" style="width: 100%;" @click="submitLogin">登录</el-button>
</el-form>
</div>
</div>
</template>
<script>
export default {
name: "Login",
data() {
return {
imgSrc: require('@/assets/logo.png'),
vcUrl: '/vhr/verifyCode?time=' + new Date(),
loginForm: {
username: 'admin',
password: '123',
code: ''
},
checked: true,
rules: {
username: [{
required: true, message: '请输入用户名', trigger: 'blur'}],
password: [{
required: true, message: '请输入密码', trigger: 'blur'}],
code: [{
required: true, message: '请输入验证码', trigger: 'blur'}]
}
}
},
methods: {
//点击图片更新验证码
updateVerifyCode() {
this.vcUrl = '/vhr/verifyCode?time=' + new Date();
},
submitLogin() {
this.$refs.loginForm.validate((valid) => {
if (valid) {
//alert('submit!');
this.postKeyValueRequest('/doLogin', this.loginForm).then(resp => {
if (resp) {
// 保存登录信息到sessionStorage,关闭页面信息会清除
window.sessionStorage.setItem("user", JSON.stringify(resp.obj));
// 重定向路径
let path = this.$route.query.redirect;
this.$router.replace((path == '/' || path == undefined) ? '/home' : path);
} else {
this.vcUrl = '/vhr/verifyCode?time=' + new Date();
this.loginForm.code = "";
}
})
} else {
this.$message.error('登录失败,请重新登录。');
return false;
}
});
}
}
}
</script>
<style>
.login-background {
background: linear-gradient(-180deg, #dcf2e6 0%, #ffffff 100%);
width: 100%;
height: 100%; /**宽高100%是为了图片铺满屏幕 */
z-index: -1;
position: absolute;
}
.login-other {
z-index: 1;
margin: 180px 0 0 calc(calc(100vw - 410px) / 2);
position: absolute;
}
.loginContainer {
border-radius: 15px;
background-clip: padding-box;
width: 350px;
padding: 15px 35px 15px 35px;
background: #fefefe;
border: 1px solid #eaeaea;
box-shadow: 0 0 25px #cac6c6;
}
.loginTitle {
margin: 15px auto 20px auto;
text-align: center;
color: #707070;
}
.loginRemember {
text-align: left;
margin: 0 0 15px 0;
}
</style>