vue滑块验证插件使用及原生js模拟点击事件

在这里插入图片描述

npm install --save vue-monoplasty-slide-verify

main.js引入

/ main.js
import Vue from 'vue';
import SlideVerify from 'vue-monoplasty-slide-verify';

Vue.use(SlideVerify);

html


<slide-verify :l="42"
            :r="10"
            :w="310"
            :h="155"
            @success="onSuccess"
            @fail="onFail"
            @refresh="onRefresh"
            :slider-text="text"
            >
</slide-verify>

js

export default {
    data(){
        return {
            text: '向右滑',
        }
    },
    methods: {
        onSuccess(){
        	console.log('验证成功');
        },
        onFail(){
        },
        onRefresh(){
        }
    }
}

在这里插入图片描述

原生js模拟点击事件

通过点击一个按钮,自动触发另一个按钮的点击事件

<button id="btn-1">Button-1</button>
<button id="btn-2">Button-2</button>
<script>
    // 假如想通过点击 Button-1 触发 Button-2 的某个事件
    let btn_1 = document.getElementById('btn-1');
    let btn_2 = document.getElementById('btn-2');
    btn_1.onclick = function () {
        var myEvent = new Event('click');
        btn_2.dispatchEvent(myEvent);
    }
    btn_2.onclick = function () {
        alert('OK');
    }
</script>

登录页代码

<template>
  <div class="login">
    <h3>欢迎登录西藏锦绣</h3>
    <ul class="msg">
      <li class="flex">
        <input v-model="tel" type="text" placeholder="请输入手机号码(+86)" />
      </li>
      <li class="flex">
        <input v-model="code" class="solo" type="text" placeholder="请输入验证码" />
        <p @click="getCode">{{timeover?'获取验证码':`${time}s重新获取`}}</p>
      </li>
      <button @click="login">登录</button>
    </ul>
    <div class="msk" v-show="showSlide"></div>
    <slide-verify
      v-show="showSlide"
      :l="42"
      :r="10"
      :w="310"
      :h="155"
      @success="onSuccess"
      @fail="onFail"
      @refresh="onRefresh"
      :slider-text="text"
    ></slide-verify>
  </div>
</template>
<script>
export default {
  data() {
    return {
      msg: "",
      text: "向右滑",
      tel: "",
      code: "",
      flag: false, //登录按钮是否激活
      showSlide: false, //是否显示验证块
      time: 8, //倒计时
      timeover: true //倒计时是否结束
    };
  },
  methods: {
    onSuccess() {
      this.timeover = false;
      this.showSlide = false;
      //   倒计时
      let timerId = setInterval(() => {
        this.time -= 1;
        if (this.time <= 0) {
          clearInterval(timerId);
          this.timeover = true;
          this.time = 8;
        }
      }, 1000);
    },
    onFail() {
      this.msg = "";
    },
    onRefresh() {
      this.msg = "";
    },
    // 点击获取验证码
    getCode() {
      if (!this.timeover) {
        return false;
      } else if (!/^1[3456789]\d{9}$/.test(this.tel)) {
        this.$toast("请输入正确的手机号");
        return false;
      } else {
        this.showSlide = true;
        // 通过点击获取验证码按钮自动触发滑块验证的刷新按钮
        let butn = document.querySelector(".slide-verify-refresh-icon");
        var myEvent = new Event("click");
        butn.dispatchEvent(myEvent);
      }
    },
    // 点击登录
    login() {
      if (!/^1[3456789]\d{9}$/.test(this.tel)) {
        this.$toast("请输入正确的手机号");
        return false;
      } else if (this.code.length != 4) {
        this.$toast("请输入正确的验证码");
        return false;
      } else {
        //   调取登录接口
      }
    }
  },
  mounted() {
    let butn = document.querySelector(".slide-verify-refresh-icon");
    butn.onclick = function() {
      // 没有打印,是因为模拟点击刷新按钮,那个按钮原本绑定了一个refresh事件,覆盖了这个事件
      console.log(333333333333);
    };
  }
};
</script>
<style lang="less" scoped>
.login {
  padding: 300px 100px;
  color: rgba(51, 51, 51, 1);
  min-height: 100vh;
  h3 {
    font-size: 48px;
    font-weight: 400;
  }
  .msg {
    margin: 55px 0 75px;
    li {
      height: 135px;
      padding-top: 35px;
      border-bottom: 1px solid #eeeeee;
      input {
        width: 100%;
        &.solo {
          width: 70%;
        }
      }
      p {
        width: 173px;
        padding: 6px 0;
        border: 1px solid rgba(153, 153, 153, 1);
        border-radius: 24px;
        font-size: 24px;
        color: rgba(153, 153, 153, 1);
        text-align: center;
      }
    }
    button {
      width: 100%;
      height: 88px;
      background: rgba(70, 159, 241, 1);
      border-radius: 24px;
      font-size: 34px;
      color: rgba(255, 255, 255, 1);
      margin-top: 90px;
    }
  }
  .slide-verify {
    position: fixed;
    left: 50%;
    height: 50%;
    transform: translate(-50%, -70%);
  }
  .msk {
    width: 100%;
    height: 100vh;
    position: fixed;
    left: 0;
    top: 0;
    right: 0;
    background-color: rgba(0, 0, 0, 0.8);
  }
}
</style>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曲曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值