关于vue2项目的登录集合(手机号登录/用户名登录)

本文详细介绍了如何在Vue2项目中实现登录功能,包括登录方式切换(手机号/密码)、手机号合法性检查、验证码倒计时、显示/隐藏密码以及前台验证提示。通过动态绑定class和计算属性实现界面交互,利用正则表达式进行手机号格式验证,并通过定时器模拟验证码倒计时。同时,展示了密码显示状态切换的实现方法,提供了一种良好的用户体验设计。
摘要由CSDN通过智能技术生成

1.登录方式的切换

功能介绍:
1)当用户点击 短信验证 时,显示手机号、验证码的输入界面;
2)当用户点击 密码登录 时,显示用户名、密码、图形验证码的输入界面。

短信验证界面:
在这里插入图片描述

密码登录界面:
在这里插入图片描述

思路:
1)给“短信登录”和“密码登录”取一个共同轮流使用的class【v-bind动态绑定class。语法规则: v-bind: class = {className: booleanValue} 或者 : class = {className: booleanValue}】,并且设置好该class被选中的CSS样式。
如:

.on的stylus样式 :
在这里插入图片描述
Login.vue的 < template >对应内容 :

<div class="login_header_title">
        <!--通过绑定class实现点击不同链接,样式就转换到哪个链接。下面的文本框也要相对应的:class绑定-->
        <a href="javascript:" :class="{on: loginWay}" @click="loginWay = true">短信登录</a>
        <a href="javascript:" :class="{on: !loginWay}" @click="loginWay  = false">密码登录</a>
</div>

Login.vue的 < script >对应内容 :

export default {
 data () {
   return {
     loginWay: true, // 如果是true, 则表示短信登录;如果是false, 则表示密码登录 
   }
 }

2)同样的,给“短信登录”和“密码登录”输入界面的各自最外一层div,动态绑定一个轮流使用的class【v-bind动态绑定class】,并且设置好该class被选中的CSS样式。

.on的stylus对应样式 :
在这里插入图片描述
Login.vue的 < template >对应内容 :

 <div class="login_content">
<!-- .prevent: 阻止网页默认行为,防止网页提交form-->
 	<form @submit.prevent="login"> 
 		<!--手机登录板块,只有loginWay表示为手机登录的true时,才触发on-->
 		<div :class="{on: loginWay}">
 		...
 		</div>
 		<!--密码登录板块, 只有loginWay表示为密码登录的false时,!loginWay才为false, 才触发on-->
 		<div :class="{on: !loginWay}">
 		...
 		</div>
	</form>
</div>
2.手机号合法检查

功能介绍:
只有用户输入正确的手机号格式,右边的验证码按钮才能被激活。

未输入,或者输入错误的格式时 :
在这里插入图片描述

输入正确的手机号格式(即11个数字)时 :
在这里插入图片描述

思路:
1)按钮是否被激活,可以使用CSS伪类 :disabled。当其为false时,按钮将会被禁用;
2) 可以设定按钮的文本颜色样式,表示按钮的是否被激活。

Login.vue的 < template >对应内容 :

<div class="login_content">
 	<form @submit.prevent="login"> 
 		<!--手机登录板块-->
 		<div :class="{on: loginWay}">
 		 <section class="login_message">
              <input type="tel" maxlength="11" placeholder="手机号" v-model="phone">
              <!--只有当rightPhone为true(即输入正确的11位手机号码格式),即!rightPhone为false,该按钮才被激活-->
              <button :disabled="!rightPhone" class="get_verification"
                      :class="{right_phone: rightPhone}">
                      获取验证码
              </button>
            </section>
 		...
 		</div>
	</form>
</div>

rightPhone是一个返回布尔值的计算属性

Login.vue的 < script >对应内容 :

export default {
...
computed: {
   rightPhone () {
     // 通过正则表达式来判断用户所输入的值是否是11个数字,如果是,则使用该方法的标签的样式发生改变
     // 1.正则表达式的式子都是在/ /当中的
     // 2. ^1  表示输入的第一个值是1
     // 3. \d  表示匹配一个数字,范围是[0, 9]
     // 4. {10} 表示匹配了前面一个字符刚好出现了10次,即[0, 9]范围内的数字获取到10个
     return /^1\d{10}$/.test(this.phone)
   }
 }

.on的stylus样式 :
在这里插入图片描述

3.手机验证码的倒计时效果

功能介绍:
当用户点击 获取验证码 时,将会出现验证码已发送之后的倒计时效果

点击 获取验证码 按钮之后:
在这里插入图片描述
思路:
1)按钮的文本有2种选择,一是“发送验证码”文本,一是倒计时文本。它们是二选一的关系,可以使用 三目运算符 实现文本的切换;
2)定义一个记录倒计时长的data变量,当用户点击按钮时,触发倒计时的方法。

Login.vue的 < template >对应内容 :

<div class="login_content">
 	<form @submit.prevent="login"> 
 		<!--手机登录板块-->
 		<div :class="{on: loginWay}">
 		 <section class="login_message">
              <input type="tel" maxlength="11" placeholder="手机号" v-model="phone">
              <!--只有当rightPhone为true(即输入正确的11位手机号码格式),即!rightPhone为false,该按钮才被激活-->
              <button :disabled="!rightPhone" class="get_verification"
                      :class="{right_phone: rightPhone}" @click.prevent="getCode">
                {{computeTime > 0 ? `已发送${computeTime}s` : '获取验证码'}}</button>
            </section>
 		...
 		</div>
	</form>
</div>

Login.vue的 < script >对应内容 :

export default {
data () {
   return {
     computeTime: 0, // 关于验证码发送的倒计时样式
   }
 },

methods: {
   // 异步获取短信验证码
   getCode () {
     // 如果当前没有倒计时 注意:
     if (!this.computeTime) {
       // 制定发送验证码的倒计时长
       this.computeTime = 30
       // 开始倒计时
       const intervalId = setInterval(() => {
         this.computeTime--
         // 如果数值小于0,那么可以停止倒计时了
         if (this.computeTime < 0) {
           clearInterval(intervalId)
         }
       }, 1000)
     }
   },
4.切换显示或隐藏密码

功能介绍:
在密码登录的输入界面,用户能够开启是否显示密码的按钮。

当用户选择隐藏密码 :
在这里插入图片描述

当用户选择显示密码 :
在这里插入图片描述

思路:
1)密码和文本的输入是 < input > 的2种type,那么可以使用 v-if 和 v-else来决定显示 哪个< input >;
2)本输入框的右边按钮包括3个内容:最外一层的按钮总< div >,以及内部的文本< div >和圆环样式的< div >,具体介绍可看代码。

Login.vue的 < template >对应内容 :

<div class="login_content">
 	<form @submit.prevent="login"> 
 		<!--密码登录板块-->
 		<div :class="{on: loginWay}">
 		...
 		 <section class="login_verification">
 		        <!--showPwd是true的话,那么就将显示该< input >-->
                <input type="text" maxlength="8" placeholder="密码" v-if="showPwd" v-model="pwd">
                <input type="password" maxlength="8" placeholder="密码" v-else v-model="pwd">
                <!--这是按钮样式-->
                <!--如果是显示密码,则为on样式,否则为off样式-->
                <div class="switch_button" :class="showPwd? 'on': 'off'" @click="showPwd = !showPwd">
                  <!--这是按钮样式的小圆环-->
                  <div class="switch_circle" :class="{right: showPwd}"></div>
                  <!--这是按钮样式的文本-->
                  <span class="switch_text">{{showPwd? 'psw' : '...'}}</span>
                </div>
              </section>
 		...
 		</div>
	</form>
</div>

Login.vue的 < script >对应内容 :

export default {
data () {
   return {
    showPwd: true, // 是否显示所输入的密码
   }
 }

Login.vue的 stylus对应样式 :
在这里插入图片描述

5.前台验证提示
Vue可以使用阿里云短信验证码进行登录,以下是简单的步骤: 1. 在阿里云控制台申请短信服务,并获取Access Key ID和Access Key Secret。 2. 在Vue项目中安装aliyun-sdk依赖:`npm install aliyun-sdk --save`。 3. 在Vue项目中创建一个`aliyunSms.js`文件,用于发送短信验证码。 ```javascript import SMSClient from '@alicloud/sms-sdk' const accessKeyId = 'yourAccessKeyId' const secretAccessKey = 'yourSecretAccessKey' const phoneNumbers = 'yourPhoneNumber' const signName = 'yourSignName' const templateCode = 'yourTemplateCode' const sendSms = (code) => { const smsClient = new SMSClient({accessKeyId, secretAccessKey}) return smsClient.sendSMS({ PhoneNumbers: phoneNumbers, SignName: signName, TemplateCode: templateCode, TemplateParam: JSON.stringify({code}) }) } export default sendSms ``` 4. 在Vue组件中调用`aliyunSms.js`文件中的`sendSms`方法,并将生成的验证码发送到后端进行验证。 ```javascript import sendSms from '@/utils/aliyunSms' export default { data() { return { phone: '', code: '' } }, methods: { sendCode() { // 调用aliyunSms.js中的方法发送短信验证码 sendSms(this.code).then(res => { console.log(res) }).catch(err => { console.log(err) }) }, login() { // 将手机号和验证码发送到后端进行验证 this.$http.post('/login', { phone: this.phone, code: this.code }).then(res => { console.log(res) }).catch(err => { console.log(err) }) } } } ``` 以上是使用阿里云短信验证码进行登录的简单示例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值