• vue 滑块 验证


    效果:

    1、创建SliderCheck.vue组件

    <template>
      <div class="slider-check-box">
        <div class="slider-check" :class="rangeStatus ? 'success' : ''">
          <i @mousedown="rangeMove" :class="rangeStatus ? successIcon : startIcon"></i>
          {{ rangeStatus ? successText : startText }}
        </div>
      </div>
    </template>
    <script>
    export default {
      props: {
        // 成功之后的函数
        successFun: {
          type: Function
        },
        //成功图标
        successIcon: {
          type: String,
          default: 'el-icon-success'
        },
        //成功文字
        successText: {
          type: String,
          default: '验证成功'
        },
        //开始的图标
        startIcon: {
          type: String,
          default: 'el-icon-d-arrow-right'
        },
        //开始的文字
        startText: {
          type: String,
          default: '请拖住滑块,拖动到最右边'
        },
        //失败之后的函数
        errorFun: {
          type: Function
        },
        //或者用值来进行监听
        status: {
          type: String
        }
      },
      data() {
        return {
          disX: 0,
          rangeStatus: false
        }
      },
      methods: {
        //滑块移动
        rangeMove(e) {
          let ele = e.target
          let startX = e.clientX
          let eleWidth = ele.offsetWidth
          let parentWidth = ele.parentElement.offsetWidth
          let MaxX = parentWidth - eleWidth
          if (this.rangeStatus) {
            //不运行
            return false
          }
          document.onmousemove = e => {
            let endX = e.clientX
            this.disX = endX - startX
            if (this.disX <= 0) {
              this.disX = 0
            }
            if (this.disX >= MaxX - eleWidth) {
              //减去滑块的宽度,体验效果更好
              this.disX = MaxX
            }
            ele.style.transition = '.1s all'
            ele.style.transform = 'translateX(' + this.disX + 'px)'
            e.preventDefault()
          }
          document.onmouseup = () => {
            if (this.disX !== MaxX) {
              ele.style.transition = '.5s all'
              ele.style.transform = 'translateX(0)'
              //执行成功的函数
              this.errorFun && this.errorFun()
            } else {
              this.rangeStatus = true
              if (this.status) {
                this.$parent[this.status] = true
              }
              //执行成功的函数
              this.successFun && this.successFun()
            }
            document.onmousemove = null
            document.onmouseup = null
          }
        }
      }
    }
    </script>
    <style lang="scss" scoped>
    $blue: #198eeb;
    @mixin jc-flex {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .slider-check-box {
      .slider-check {
        background-color: #e9e9e9;
        position: relative;
        transition: 1s all;
        user-select: none;
        color: #585858;
        @include jc-flex;
        height: 40px;
        &.success {
          background-color: $blue;
          color: #fff;
          i {
            color: $blue;
          }
        }
        i {
          position: absolute;
          left: 0;
           50px;
          height: 100%;
          color: $blue;
          background-color: #fff;
          border: 1px solid #d8d8d8;
          cursor: pointer;
          font-size: 24px;
          @include jc-flex;
        }
      }
    }
    </style>
    View Code

    2、Login.vue页面引入组件并注册

     import SliderCheck from './components/SliderCheck'
    
      components: { SliderCheck }

    3、使用SliderCheck.vue组件

    <SliderCheck :successFun="handleSuccessFun" :errorFun="handleErrorFun"></SliderCheck>

    4、添加事件函数

     methods: {
        // 滑块验证成功回调
        handleSuccessFun() {
          this.login_model.status = true
        },
        // 滑块验证失败回调
        handleErrorFun() {},
      }
  • 相关阅读:
    File
    Include and Require
    Date and Time
    css3的nth-child选择器使用示例
    document.title
    php获取从百度搜索进入网站的关键词的详细代码
    Iphone手机、安卓手机浏览器控制默认缩放大小的方法
    离线宝调用
    织梦DedeCMS网站地图模板
    禁止选择文本和禁用右键 v3.0
  • 原文地址:https://www.cnblogs.com/lst619247/p/15895396.html
Copyright © 2020-2023  润新知