亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用konva和vue-konva庫如何實現拖拽滑塊驗證功能

發布時間:2020-07-30 11:22:46 來源:億速云 閱讀:392 作者:小豬 欄目:web開發

這篇文章主要為大家展示了使用konva和vue-konva庫如何實現拖拽滑塊驗證功能,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

1. 在vue項目中安裝konvavue-konva

npm install konva vue-konva --save-dev

2. 引入vue-konva

import VueKonva from ‘vue-konva';

Vue.use(VueKonva)

3. 創建單獨的滑塊驗證組件 Captcha.vue,在相應的頁面中引入使用即可

<template>
 <v-stage :config="Config.stage">
  <v-layer ref="layer">
   <!-- 背景組 -->
   <v-group :config="Config.group">
    <v-rect :config="Config.rect"></v-rect>
    <v-text :config="Config.text"></v-text>
   </v-group>
   <!-- 遮罩層組 -->
   <v-group :config="Config.group">
    <v-rect :config="Config.coverRect" ref="coverRect"></v-rect>
    <v-text :config="Config.coverText" v-if="success" ref="coverText"></v-text>
   </v-group>
   <!-- 滑塊組 -->
   <v-group :config="Config.moveGroup" ref="moveGroup" @mouseover="moveGroupMouseOver" @mouseout="moveGroupMouseOut" @mousedown="moveGroupMouseDown" @mouseup="moveGroupStop">
    <v-rect :config="Config.moveRect" ref="moveRect"></v-rect>
    <!-- 驗證成功組 -->
    <v-group :config="Config.group" v-if="success">
     <v-circle :config="Config.succCircle" ref="succCircle"></v-circle>
     <v-line :config="Config.succLine"></v-line>
    </v-group>
    <v-group :config="Config.moveGroup_l" v-else>
     <v-line :config="Config.moveLine1"></v-line>
     <v-line :config="Config.moveLine2"></v-line>
    </v-group>
   </v-group>
  </v-layer>
 </v-stage>
</template>
<script>
/*
 * captchaConfig // 屬性 {width:330, height: 36} 組件的寬高
 * eventCaptcha  // 驗證成功的回調
 */
let _$mouseDown = false; // 鼠標是否在滑塊組中按下,因為和html沒有綁定,所以沒有放在data中,并以_$開頭
export default {
 props: {
  captchaConfig: {
   type: Object,
   default: () => ({
    width: 330, // 寬度
    height: 36, // 高度
   }),
  },
 },
 data() {
  const { width, height } = this.captchaConfig;
  let Config = {
   stage: {
    width: width,
    height: height,
   },
   group: {
    x: 0,
    y: 0,
   },
   rect: {
    width: width,
    height: height,
    fill: '#e8e8e8',
   },
   text: {
    x: 0,
    y: 0,
    width: width,
    height: height,
    text: '請按住滑塊,拖動到最右邊',
    fontSize: 14,
    fontFamily: '微軟雅黑',
    align: 'center',
    lineHeight: parseFloat(height / 14),
   },
   //滑塊組
   moveGroup: {
    draggable: true,
   },
   moveRect: {
    x: 0.5,
    y: 0.5,
    width: height - 1,
    height: height - 1,
    fill: '#fff',
    stroke: '#8d92a1',
    strokeWidth: 1,
   },
   moveGroup_l: {
    x: height / 3,
    y: height / 3,
   },
   moveLine1: {
    x: 0,
    y: 0,
    points: [0, 0, height / 6, height / 6, 0, height / 3],
    stroke: '#8d92a1',
    strokeWidth: 1,
    lineCap: 'round',
    lineJoin: 'round',
   },
   moveLine2: {
    x: height / 6,
    y: 0,
    points: [0, 0, height / 6, height / 6, 0, height / 3],
    stroke: '#8d92a1',
    strokeWidth: 1,
    lineCap: 'round',
    lineJoin: 'round',
   },
   //創建遮罩層組
   coverRect: {
    width: height / 2,
    height: height,
    fill: '#8d92a1',
    opacity: 0.8,
   },
   coverText: {
    x: 0,
    y: 0,
    width: width - height,
    height: height,
    align: 'center',
    text: '驗證成功',
    fontSize: 14,
    fontFamily: '微軟雅黑',
    fontStyle: 'bold',
    fill: '#fff',
    lineHeight: parseFloat(height / 14),
   },
   //驗證成功組
   succCircle: {
    x: height / 2,
    y: height / 2,
    radius: height / 4,
    fill: '#8d92a1',
   },
   succLine: {
    points: [height / 2 - height / 4 / 2, height / 2, height / 2 - height / 4 / 8, height / 2 + height / 4 / 2, height / 2 + height / 4 / 2, height / 2 - height / 4 / 2],
    stroke: '#fff',
    strokeWidth: 1,
    lineCap: 'round',
    lineJoin: 'round',
   },
  };
  return {
   Config,
   success: 0, // 標記是否驗證成功 0 失敗 1 成功
  };
 },
 mounted() {
  // 給document綁定鼠標抬起事件
  document.addEventListener('mouseup', this.moveGroupStop);
  // 在組件注銷的時候取消綁定
  this.$once('hook:beforeDestroy', () => {
   document.removeEventListener('mouseup', this.moveGroupStop);
  });
  // 給滑塊組綁定拖拽監聽
  this.$refs.moveGroup.getNode().dragBoundFunc((pos) => {
   const { width, height } = this.captchaConfig;
   let moveGroup = this.$refs.moveGroup.getNode();
   let moveRect = this.$refs.moveRect.getNode();
   let coverRect = this.$refs.coverRect.getNode();
 
   let moveX = moveGroup.getAttrs().x &#63; moveGroup.getAttrs().x : 0;
   coverRect.width(moveX + height / 2);
   if (pos.x >= width - height) {
    if (this.success == 0) {
     this.success = 1;
     this.$emit('eventCaptcha');
    }
    coverRect.opacity(1);
   }
   if (this.success == 0) {
    if (pos.x < 0) {
     return {
      x: 0,
      y: moveGroup.getAbsolutePosition().y,
     };
    } else if (pos.x > width - height) {
     return {
      x: width - height,
      y: moveGroup.getAbsolutePosition().y,
     };
    } else {
     return {
      x: pos.x,
      y: moveGroup.getAbsolutePosition().y,
     };
    }
   } else {
    return {
     x: width - height,
     y: moveGroup.getAbsolutePosition().y,
    };
   }
  });
 },
 methods: {
  // 鼠標進入滑塊組
  moveGroupMouseOver() {
   document.body.style.cursor = 'pointer';
  },
  // 鼠標移出滑塊組
  moveGroupMouseOut() {
   document.body.style.cursor = 'default';
  },
  // 鼠標按下
  moveGroupMouseDown() {
   _$mouseDown = true; // 只有在滑塊組點擊鼠標才被視作要點擊滑動驗證
  },
  // 鼠標抬起
  moveGroupStop(e) {
   if (!_$mouseDown) return;
   _$mouseDown = false;
   document.body.style.cursor = 'default'; // 鼠標恢復指針狀態
   if (this.success == 0) {
    this.$refs.moveGroup.getNode().to({
     x: 0,
     duration: 0.3,
    });
    this.$refs.coverRect.getNode().to({
     width: this.captchaConfig.height / 2,
     duration: 0.3,
    });
   }
  },
 },
};
</script>

4. 最終效果

使用konva和vue-konva庫如何實現拖拽滑塊驗證功能

使用konva和vue-konva庫如何實現拖拽滑塊驗證功能

使用konva和vue-konva庫如何實現拖拽滑塊驗證功能

簡單的滑塊驗證功能實現,可直接在vue頁面中引入使用。

以上就是關于使用konva和vue-konva庫如何實現拖拽滑塊驗證功能的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥芬河市| 诏安县| 开阳县| 秦安县| 鄂托克前旗| 马关县| 两当县| 通渭县| 彰化市| 弥勒县| 乳山市| 武城县| 深州市| 阿图什市| 永平县| 名山县| 祁东县| 闽侯县| 故城县| 宜城市| 和静县| 乌拉特前旗| 丰原市| 通化市| 安丘市| 任丘市| 宝清县| 筠连县| 迭部县| 镇安县| 南和县| 海淀区| 库尔勒市| 隆化县| 高雄市| 南木林县| 江达县| 揭阳市| 绥芬河市| 达拉特旗| 东乡族自治县|