欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue?實現左滑圖片驗證功能

 更新時間:2023年04月03日 11:04:48   作者:水星記_  
網頁中滑動圖片驗證一直是各大網站、移動端的主流校驗方式,其主要作用是為了區(qū)分人和機器以及為了防止機器人程序暴力登錄或攻擊從而設置的一種安全保護方式,這篇文章主要介紹了vue?實現左滑圖片驗證,需要的朋友可以參考下

前言

眾所周知,網頁中滑動圖片驗證一直是各大網站、移動端的主流校驗方式,其主要作用是為了區(qū)分人和機器以及為了防止機器人程序暴力登錄或攻擊從而設置的一種安全保護方式。從開發(fā)的角度來看要想實現這個功能還是需要一點時間的,但其實網上已經有很多專門針對圖片滑動驗證功能的插件了,今天就給大家分享一款好用的插件 ----- vue-monoplasty-slide-verify。

一、安裝

使用 npm 安裝 vue-monoplasty-slide-verify 插件。

npm i vue-monoplasty-slide-verify --savve
cnpm i vue-monoplasty-slide-verify --savve //鏡像安裝

接著我們在 main.js 中引入。

import slideVerify from "vue-monoplasty-slide-verify";
Vue.use(slideVerify);

二、使用

在使用之前我們先來看看它的一些屬性和回調函數。

屬性

參數描述
l滑動碎片的大小
r滑動碎片的圓角
w畫布的寬
h畫布的高
imgs背景圖數組,默認值 [],為 [] 時隨機加載插件圖片
accuracy滑動驗證的誤差范圍,默認值 5
show是否顯示刷新按鈕,默認值 true

回調函數

函數名描述
success返回時間參數,單位為毫秒
fail驗證不通過時的回調函數
refresh點擊刷新按鈕后的回調函數
again檢測到非人為操作滑動時觸發(fā)的回調函數
fulfilled刷新成功之后的回調函數

在父組件里如果需要重置,可以在父組件中調用子組件 reset() 方法。

1. 指定 ref 的值

<slide-verify ref="slideblock" ></slide-verify>

2. 調用

this.$refs.slideblock.reset();

以上是我們實現這個功能基本都會用到的一些配置,感興趣的同學可以去 官網文檔 查看更詳細的內容。下面我們試著來用代碼實現這個功能。

為了方便在項目中使用,我直接將其封裝成公共的組件,這樣無論在任何頁面都可以直接引入使用,如果需要修改配置,可通過 propsemit 傳參修改在組件中寫死的屬性值。

封裝文件(子組件)

文件路徑: src/components/verification/index.vue

<template>
  <div>
    <!-- vant 彈框組件,也可自定義彈框 -->
    <van-popup v-model="isShowSlide" :visible.sync="isShowSlide" @close="$emit('update:dialogChild', false)">
      <div class="contantBox">
        <p>安全驗證</p>
        <slide-verify :l="canvas.l" :r="canvas.r" :w="canvas.w" :h="canvas.h" ref="slideblock" @again="onAgain" @fulfilled="onFulfilled"
          @success="onSuccess" @fail="onFail" @refresh="onRefresh" :accuracy="3" :imgs="imgs" slider-text="拖動滑塊完成拼圖">
        </slide-verify>
        <!-- 耗時 -->
        <div>{{timeDate}}</div>
      </div>
    </van-popup>
  </div>
</template>

<script>
export default {
  data() {
    return {
      timeDate: "", //耗時
      canvas: {
        l: 28, //滑動碎片的大小
        r: 7, //滑動碎片的圓角
        w: 300, //畫布的寬
        h: 160, //畫布的高
      },
      isShowSlide: false, //彈框顯隱
      imgs: [
        require("@/assets/1.png"),
        require("@/assets/2.png"),
        require("@/assets/3.png"),
      ], //自定義的隨機圖片
      timer: null, //定時器
    };
  },
  props: {
    dialogChild: {
      type: Boolean,
      default: false,
    },
  },
  watch: {
    dialogChild: {
      handler(newName, oldName) {
        this.isShowSlide = newName;
      },
      deep: true,
    },
  },
  methods: {
    // 返回時間參數,單位為毫秒
    onSuccess(times) {
      this.$emit("successOn", times);
      this.timeDate = "驗證通過,耗時" + (times / 1000).toFixed(1) + "s";
      // 成功后關閉彈框
      this.timer = setInterval(() => {
        this.isShowSlide = false;
      }, 1000);
    },
    // 驗證不通過時的回調函數
    onFail() {
      this.$emit("failOn");
      console.log("驗證不通過");
      this.timeDate = "";
    },
    // 點擊刷新按鈕后的回調函數
    onRefresh() {
      this.$emit("refreshOn");
      console.log("點擊了刷新圖標");
      this.timeDate = "";
    },
    // 刷新成功之后的回調函數
    onFulfilled() {
      this.$emit("fulfilledOn");
      console.log("刷新成功");
    },
    // 檢測到非人為操作滑動時觸發(fā)的回調函數
    onAgain() {
      this.$emit("againOn");
      console.log("檢測到非人為操作的哦");
      // 刷新
      this.$refs.slideblock.reset();
    },
    // 父組件調用刷新方法(每次進來重置組件)
    handleClick() {
      this.$nextTick(() => {
        this.timeDate = "";
        clearInterval(this.timer);//清除定時器
        this.$refs.slideblock.reset();
      });
    },
  },
};
</script>
<style scoped>
p {
  display: flex;
  justify-content: center;
  font-size: 15px;
  margin: 8px 0px;
}
.contantBox {
  padding: 0px 8px 8px 8px;
}
</style>

組件內使用(父組件)

<template>
  <div>
    <!-- 使用組件 -->
    <van-button @click="verifyOn" round color="linear-gradient(to right,#FE566D, #F83D2A)" type="primary" block>獲取驗證碼</van-button>
    <!-- 如若想要修改其它參數通過props動態(tài)傳值即可 -->
    <verification ref="parent" :dialogChild.sync="isShowSlide" />
  </div>
</template>

<script>
// 引入組件
import verification from "@/components/verification";
export default {
  data() {
    return {
      isShowSlide: false,
    };
  },
  components: {
    verification,
  },
  methods: {
    // 點擊獲取驗證碼按鈕
    verifyOn() {
      this.isShowSlide = true;
      // 每次點擊都觸發(fā)一下重置驗證組件的方法
      this.$refs.parent.handleClick();
    },
  },
};
</script>

實現效果

在這里插入圖片描述

到此這篇關于vue 實現左滑圖片驗證的文章就介紹到這了,更多相關vue 左滑圖片驗證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級傳值,vuex)

    uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級傳值,vuex)

    這篇文章主要介紹了uniapp和vue組件之間的傳值(父子傳值,兄弟傳值,跨級傳值,vuex),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue.js使用axios動態(tài)獲取response里的data數據操作

    Vue.js使用axios動態(tài)獲取response里的data數據操作

    這篇文章主要介紹了Vue.js使用axios動態(tài)獲取response里的data數據操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue組件實現首次加載就觸發(fā)watch

    vue組件實現首次加載就觸發(fā)watch

    這篇文章主要介紹了vue組件實現首次加載就觸發(fā)watch方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue.js響應式原理解析與實現

    vue.js響應式原理解析與實現

    這篇文章主要為大家詳細介紹了vue.js響應式原理解析與實現,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 前端之vue3使用WebSocket的詳細步驟

    前端之vue3使用WebSocket的詳細步驟

    websocket實現的全雙工通信,真真太香了,下面這篇文章主要給大家介紹了關于前端之vue3使用WebSocket的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • 詳解Vuex中mapState的具體用法

    詳解Vuex中mapState的具體用法

    本篇文章主要介紹了詳解Vuex中mapState的具體用法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • ?用Vue?Demi?構建同時兼容Vue2與Vue3組件庫

    ?用Vue?Demi?構建同時兼容Vue2與Vue3組件庫

    這篇文章主要介紹了?用Vue?Demi?構建同時兼容Vue2與Vue3組件庫,我們通過考慮其功能、工作原理以及如何開始使用它來了解?Vue?Demi,下面我們一起進入文章學起來吧
    2022-02-02
  • 詳解Vue中AXIOS的封裝

    詳解Vue中AXIOS的封裝

    這篇文章主要為大家介紹了Vue中AXIOS的封裝,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Vue過濾器filters如何使用

    Vue過濾器filters如何使用

    Vue過濾器filters用于一些常見的文本格式化,通過過濾器可以進行處理成自己想要展示出來的格式,由“管道”符號指示,本文給大家介紹Vue過濾器filters使用方式,感興趣的朋友一起看看吧
    2023-10-10
  • vue3中的reactive函數聲明數組方式

    vue3中的reactive函數聲明數組方式

    這篇文章主要介紹了vue3中的reactive函數聲明數組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論