vue 实现滑动块解锁示例详解

目录
  • 引言
  • 下载需要用到的组件库
  • 书写登录页面
    • template 结构:
    • script 逻辑:
    • style 样式:
    • 登录页面效果展示:
  • 写滑动解锁组件
    • template 模板:
    • script 代码:
    • style 样式:
    • 将滑动组件运用到我们的 Login 组件中:
    • 补充逻辑代码
  • 最终效果:

引言

从0开始,写一个登录滑动解锁的功能。

首先,新创建一个 vue 项目。 或者在已有的项目写也可以。 将无用的代码删一下。

下载需要用到的组件库

1、下载 element-ui。

yarn add  element-ui -S   or   npm i element-ui -S

2、 在main.js 中引入。

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
+  import ElementUI from 'element-ui'
+  import 'element-ui/lib/theme-chalk/index.css'
    Vue.config.productionTip = false
+  Vue.use(ElementUI)
    new Vue({
      router,
      store,
 +   el: '#app',
      render: h => h(App)
    }).$mount('#app')

3、测试是否下载成功。

<template>
  <div class="about">
  +   <el-button type="primary">主要按钮</el-button>
    <h1>This is an about page</h1>
  </div>
</template>

书写登录页面

页面可以正常展示按钮,说明下载成功。可以开始写代码了。

写一个简单的登录页面。

Login.vue

template 结构:

<template>
  <div class="login-container">
    <div class="login-header">
      <h1>xxx系统</h1>
    </div>
   <div class="login-body">
      <div class="login-form-container">
        <el-form
          ref="loginFormRef"
          class="form-style"
          :label-position="`right`"
          :model="loginFormData"
          status-icon
        >
          <el-form-item
            name="username"
            prop="username"
            >
            <el-input
              v-model="loginFormData.username"
              placeholder="请输入用户名"
              prefix-icon="el-icon-user"
              clearable
            />
          </el-form-item>
          <el-form-item
            class="el-item-style"
            name="password"
            prop="password"
          >
            <!-- 密码框 -->
            <el-input
              prefix-icon="el-icon-lock"
              v-model="loginFormData.password"
              :type="`${hasOpenEye? 'text':'password'}`"
              placeholder="请输入密码">
              <i
                slot="suffix"
                :class="[hasOpenEye ? 'el-icon-unlock' : 'el-icon-lock']"
                style="font-size: 14px; cursor: pointer"
                @click="hasOpenEye = !hasOpenEye"/>
            </el-input>
          </el-form-item>
          <el-form-item class="el-item-style">
            <el-button
              :loading="false"
              style="
                width: 100%;
                height: 46px;
                line-height: 15px;
                font-size: 23px;
              "
              type="primary"
              @click="login"
            >登录</el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
  </div>
</template>

script 逻辑:

<script>
export default {
  // 登录表单数据
  data () {
  return {
    loginFormData: {
      username: "123232",
      password: "21232"
    },
    hasOpenEye : false, // 是否显示密码
  }
  },
  components: {},
  methods: {
    login () {},
  },
}
</script>

style 样式:

<style lang="less" scoped>
.login-container {
  position: relative;
  height: 100%;
  width: 100%;
  display: flex;
  user-select: none;
  flex-direction: column;
  .login-header {
    display: flex;
    align-items: center;
    padding-left: 50px;
    cursor: pointer;
  }
  .login-footer {
    display: flex;
    justify-content: center;
    align-items: center;
    color: #322b34;
    font-size: 12px;
  }
  .login-header,
  .login-footer {
    height: 10%;
  }
  .login-body {
    background-position: center center;
    background-repeat: no-repeat;
    background-size: 100% auto;
    flex: 1 1;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    user-select: none;
    .login-form-container {
      width: 30%;
      border: 1px solid mix(pink, #000, 80);
      box-shadow: 0 0.5em 1em rgba(0, 0, 0, 0.3);
      background: linear-gradient(
        to bottom,
        rgba(255, 255, 255, 0.3),
        rgba(0, 0, 0, 0.3)
      );
      padding: 20px 30px;
      border-radius: 5px;
    }
  }
}
</style>

登录页面效果展示:

写滑动解锁组件

1、下载安装包:

vue-monoplasty-slide-verify

2、导入到 main.js 中

import SlideVerify from 'vue-monoplasty-slide-verify';
Vue.use(SlideVerify);

3、新建一个文件component / verify.vue

template 模板:

<template>
  <div>
    <!-- title="滑块验证码" -->
    <el-dialog
      :visible.sync="dialogVisible"
      :before-close="dialogBeforeClose"
      :close-on-click-modal="false"
    >
      <div class="flex">
        <slide-verify
          ref="slideblock"
          :w="fullWidth"
          :h="fullHeight"
          :accuracy="accuracy"
          :slider-text="text"
          :imgs="imgList"
          @again="onAgain"
          @fulfilled="onFulfilled"
          @success="onSuccess"
          @fail="onFail"
          @refresh="onRefresh"
        />
      </div>
    </el-dialog>
  </div>
</template>

script 代码:

<script>
export default {
  name: 'verify',
  data() {
    return {
      dialogVisible: false,
      fullWidth: 450,
      fullHeight: 304,
      msg: '',
      text: '请向右滑动滑块完成验证',
      // 精确度小,可允许的误差范围小;为1时,则表示滑块要与凹槽完全重叠,才能验证成功。默认值为5
      accuracy: 3,
      imgList: [
      // 图片的路径:
        require('../assets/3.jpg')
      ]
    }
  },
  mounted() {},
  methods: {
    dialogBeforeClose() {
      this.dialogVisible = false
    },
    onSuccess() {
      console.log('验证通过')
      this.msg = 'login success'
      this.dialogVisible = false
      this.$emit('verifySuccess')
       this.$message.success("验证成功")
       this.$router.push('/a')
    },
    onFail() {
      console.log('验证不通过')
      this.msg = '验证不通过'
        this.$message.error('验证失败')
    },
    onRefresh() {
      console.log('点击了刷新小图标')
      this.msg = ''
    },
    onFulfilled() {
      console.log('刷新成功啦!')
    },
    onAgain() {
      console.log('检测到非人为操作的哦!')
      this.msg = 'try again'
      // 刷新
      this.$refs.slideblock.reset()
    },
    handleClick() {
      // 父组件直接可以调用刷新方法
      this.$refs.slideblock.reset()
      console.log(23333);
    }
  }
}
</script>

style 样式:

<style lang="less" scoped>
.flex{
  display: flex;
  align-items: center;
  justify-content: center;
}
/deep/ .el-dialog {
  width: 500px;
  border-radius: 16px;
  margin: auto;
}
/deep/ .el-dialog__header {
  display: none;
}
/deep/ .slide-verify-slider {
  border-radius: 33px;
}
/deep/ .slide-verify-slider-mask {
  border-radius: 33px 0 0 33px;
}
</style>

将滑动组件运用到我们的 Login 组件中:

import verify from "../components/verify.vue";
export default {
 components: {
    verify
  },
}
<template>
   <el-form>
   ......
   </el-form>
+ <verify ref="verify"></verify>
</template>

补充逻辑代码

login () {
      this.$refs.verify.dialogVisible = true
  },

最终效果:

完成。

以上就是vue 实现滑动块解锁示例详解的详细内容,更多关于vue 滑动块解锁的资料请关注我们其它相关文章!

(0)

相关推荐

  • Vue滑块解锁组件使用方法详解

    本文实例为大家分享了Vue滑块解锁组件的使用,供大家参考,具体内容如下 依据 JS拖动滑块验证 开发的 Vue 滑块解锁组件. <template>   <div ref="wrap" class="slider-unlock">     <div class="before">请按住滑块,拖动到最右边</div>     <div ref="after" class=&q

  • vue滑动解锁组件使用方法详解

    本文实例为大家分享了vue滑动解锁组件的使用,供大家参考,具体内容如下 这是一个pc端的滑动解锁组件 效果图: 话不多说,直接上代码 html部分 <template>     <div class="dragVerify">         <div class="spout" ref="spout">             <div                 class="slidi

  • vue实现滑动解锁功能

    本文实例为大家分享了vue实现滑动解锁功能的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: <template>   <div>     <div id="box">       <div class="bgColor"></div>       <div class="txt">滑动解锁</div>       <!--给i标签添加上相应字体图

  • vue项目记录锁定和解锁功能实现

    本文实例为大家分享了vue项目记录锁定和解锁功能实现代码,供大家参考,具体内容如下 一.定义 api 模块 import request from '@/utils/request'   export default {     // 分页查询     getHospitalList(current, limit, searchObj) {         return request({             url: `/admin/hospital/findPageHospital/${

  • vue 实现滑动块解锁示例详解

    目录 引言 下载需要用到的组件库 书写登录页面 template 结构: script 逻辑: style 样式: 登录页面效果展示: 写滑动解锁组件 template 模板: script 代码: style 样式: 将滑动组件运用到我们的 Login 组件中: 补充逻辑代码 最终效果: 引言 从0开始,写一个登录滑动解锁的功能. 首先,新创建一个 vue 项目. 或者在已有的项目写也可以. 将无用的代码删一下. 下载需要用到的组件库 1.下载 element-ui. yarn add ele

  • .NET 6实现滑动验证码的示例详解

    目录 CaptchaData.cs CaptchaValidateData.cs ImageCaptchaInfo.cs Resource.cs SliderImageCaptchaInfo.cs SlideTrack.cs TemplatePair.cs Track.cs 本节创建的类全部在工程的Model目录下: CaptchaData.cs CaptchaData.cs:验证码的数据类实体 namespace SlideCaptcha.Model { public class Captch

  • vue选项卡Tabs组件实现示例详解

    目录 概述 效果图 实现过程 组件分析 所需的前置知识 项目组件文件夹 Tabs.vue TabPane.vue render.js index.js 使用 总结 概述 前端项目中,多数页面涉及到选项卡切换,包括路由切换,指令v-if等,本质上其实和选项卡切换思想差不多,如果是个简单的选项卡,还是很简单的,我们也不需要什么组件库的组件,自己也能几行代码写出来,但是涉及到动画,尺寸计算,拖拽的功能的时候,多数情况下,自己写还是要花点时间的,组件库就提供了现成的,拿来改改样式就行,为了对这个组件更加

  • Springboot Vue实现单点登陆功能示例详解

    目录 正文 简单上个图 先分析下登陆要做啥 怎么落实? 上代码 接口: token生成部分 刷新token 验证token 正文 登陆是系统最基础的功能之一.这么长时间了,一直在写业务,这个基础功能反而没怎么好好研究,都忘差不多了.今天没事儿就来撸一下. 以目前在接触和学习的一个开源系统为例,来分析一下登陆该怎么做.代码的话我就直接CV了. 简单上个图 (有水印.因为穷所以没开会员) 先分析下登陆要做啥 首先,搞清楚要做什么. 登陆了,系统就知道这是谁,他有什么权限,可以给他开放些什么业务功能,

  • vue 之 .sync 修饰符示例详解

    在一些情况下,我们可能会需要对一个 prop (父子组件传递数据的属性) 进行"双向绑定". 在vue 1.x 中的 .sync 修饰符所提供的功能.当一个子组件改变了一个带 .sync 的prop的值时,这个变化也会同步到父组件中所绑定的值. 这很方便,但也会导致问题,因为它破坏了单向数据流.(数据自上而下流,事件自下而上走) 由于子组件改变 prop 的代码和普通的状体改动代码毫无区别,所以当你光看子组件的代码时,你完全不知道它合适悄悄地改变了父组件的状态. 这在 debug 复杂

  • Vue项目接入Paypal实现示例详解

    一.支付流程 在paypal的官网上给出了这个按钮内部封装的流程,整个流程只需要用户点击按钮,触发创建订单事件,然后我们再监听用户支付成功的回调,拿到订单id传给后端,让后端再进行一次校验. 二.实现方案 接入方式 优点 缺点 相关资料 在html中插入paypal的script脚本 实现方式比较简单 1.安全性问题:公司的client_id会暴露在代码中 2.引用的按钮样式比较难自定义 官方文档:https://developer.paypal.com/docs/checkout/integr

  • Vue响应式原理的示例详解

    Vue 最独特的特性之一,是非侵入式的响应系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.聊到 Vue 响应式实现原理,众多开发者都知道实现的关键在于利用 Object.defineProperty , 但具体又是如何实现的呢,今天我们来一探究竟. 为了通俗易懂,我们还是从一个小的示例开始: <body> <div id="app"> {{ message }} </div> <script> v

  • Vue 服务端渲染SSR示例详解

    目录 手写Vue服务端渲染 一.开始vue-ssr之旅 二.采用模板渲染 三.ssr目录创建 四.通过webpack实现编译vue项目 app.js client-entry.js server-entry.js 五.配置客户端打包和服务端打包 六.配置运行脚本 七.服务端配置 七.通过json配置createBundleRenderer方法 八.集成VueRouter 配置入口文件 配置组件信息 防止刷新页面不存在 保证异步路由加载完成 十.集成vuex配置 在后端更新vuex 在浏览器运行时

  • vue前端实现打印下载示例详解

    目录 html2canvas介绍 jspdf介绍 printjs介绍 html2canvas介绍 分享一下几个后台管理系统比较常用的插件:下载.打印 html2canvas是在浏览器上对网页进行截图操作,实际上是操作DOM,这个插件也有好长时间了,比较稳定,目前使用还没有遇到什么bug jspdf介绍 如果下载出来是pdf文件,可以加上jspdf插件,会先通过html2canvas把页面转化成base64图片,再通过jspdf导出 安装 npm i html2canvas jspdf 或 yar

  • Vue extends 属性的用法示例详解

    目录 引言 App.vue Son.vue HelloWorld.vue 小结 引言 最近在看抖音——<小山与 bug>,看到一个很神奇的 Vue 继承组件的方法,后来专门去翻了 element 和 iview 的源码,发现这个属性的用法好像在这些框架里还没有用到过,怀着试一试的态度,我就自己搭建了个测试项目,发现其实还是挺好用的,甚至有望代替目前我们前端框架业务代码混入的底层实现.话不多说,直接上代码: App.vue <template> <div> <Son

随机推荐