vue实现滑动验证条
作者:Ezerbel 发布时间:2024-04-30 10:29:14
标签:vue,滑动,验证条
本文实例为大家分享了vue实现滑动验证条的具体代码,供大家参考,具体内容如下
效果
代码
VerifySlider.vue
<template>
? <div
? ? ref="dragDiv"
? ? class="drag"
? >
? ? <div ref="drag_bg" class="drag_bg" />
? ? <div ref="drag_text" class="drag_text">{{ confirmWords }}</div>
? ? <div class="slide-check-tip">请滑动验证</div>
? ? <div
? ? ? ref="moveDiv"
? ? ? :class="{'handler_ok_bg':confirmSuccess}"
? ? ? class="handler handler_bg"
? ? ? style="position: absolute;top: 0px;left: 0px;"
? ? ? @mousedown="mousedownFn($event)"
? ? />
? </div>
</template>
<script>
export default {
? data() {
? ? return {
? ? ? beginClientX: 0, /* 距离屏幕左端距离 */
? ? ? mousePressing: false, /* 是否正则按压滑动条 */
? ? ? maxwidth: '', /* 拖动最大宽度,依据滑块宽度算出来的 */
? ? ? confirmWords: '按住滑块,拖动到最右边', /* 滑块文字 */
? ? ? confirmSuccess: false /* 验证成功判断 */
? ? };
? },
? mounted() {
? ? document.getElementsByTagName('html')[0].addEventListener('mousemove', this.mouseMoveFn);
? ? document.getElementsByTagName('html')[0].addEventListener('mouseup', this.moseUpFn);
? },
? methods: {
? ? mousedownFn: function(e) {
? ? ? console.log(' mousedownFn ');
? ? ? this.initMaxWidth();
? ? ? if (!this.confirmSuccess) {
? ? ? ? e.preventDefault && e.preventDefault(); // 阻止文字选中等 浏览器默认事件
? ? ? ? this.mousePressing = true;
? ? ? ? this.beginClientX = e.clientX;
? ? ? }
? ? }, // mousedoen 事件
? ? successFunction() {
? ? ? this.confirmSuccess = true;
? ? ? this.confirmWords = '验证通过';
? ? ? if (window.addEventListener) {
? ? ? ? document.getElementsByTagName('html')[0].removeEventListener('mousemove', this.mouseMoveFn);
? ? ? ? document.getElementsByTagName('html')[0].removeEventListener('mouseup', this.moseUpFn);
? ? ? } else {
? ? ? ? document.getElementsByTagName('html')[0].removeEventListener('mouseup', () => { });
? ? ? }
? ? ? this.$refs.drag_text.style.color = '#fff';
? ? ? this.$refs.moveDiv.style.left = this.maxwidth + 'px';
? ? ? this.$refs.drag_bg.style.width = this.maxwidth + 'px';
? ? }, // 验证成功函数
? ? mouseMoveFn(e) {
? ? ? if (this.mousePressing) {
? ? ? ? console.log('mouseMoveFn');
? ? ? ? const width = e.clientX - this.beginClientX;
? ? ? ? if (width > 0 && width <= this.maxwidth) {
? ? ? ? ? this.$refs.moveDiv.style.left = width + 'px';
? ? ? ? ? this.$refs.drag_bg.style.width = width + 'px';
? ? ? ? } else if (width > this.maxwidth) {
? ? ? ? ? this.successFunction();
? ? ? ? }
? ? ? }
? ? }, // mousemove事件
? ? moseUpFn(e) {
? ? ? console.log('moseUpFn');
? ? ? this.mousePressing = false;
? ? ? var width = e.clientX - this.beginClientX;
? ? ? if (width < this.maxwidth) {
? ? ? ? // document.getElementsByClassName('handler')[0].style.left = 0 + 'px'
? ? ? ? // document.getElementsByClassName('drag_bg')[0].style.width = 0 + 'px'
? ? ? ? this.$refs.moveDiv.style.left = 0 + 'px';
? ? ? ? this.$refs.drag_bg.style.width = 0 + 'px';
? ? ? }
? ? }, // mouseup事件,
? ? initMaxWidth() {
? ? ? this.maxwidth = this.$refs.dragDiv.clientWidth - this.$refs.moveDiv.clientWidth;
? ? ? // this.maxwidth = 338
? ? },
? ? // 将滑动条重新至于最左侧
? ? reset() {
? ? ? this.$refs.moveDiv.style.left = 0 + 'px';
? ? ? this.$refs.drag_bg.style.width = 0 + 'px';
? ? ? this.$refs.drag_text.style.color = '#333';
? ? ? this.confirmSuccess = false;
? ? ? this.mousePressing = false;
? ? ? this.maxwidth = this.$refs.dragDiv.clientWidth - this.$refs.moveDiv.clientWidth;
? ? ? document.getElementsByTagName('html')[0].addEventListener('mousemove', this.mouseMoveFn);
? ? ? document.getElementsByTagName('html')[0].addEventListener('mouseup', this.moseUpFn);
? ? }
? }
};
</script>
<style scoped>
.slide-check-tip{
? position: absolute;
? display: inline-block;
? top: 0px;
? right: -85px;
? /* border: 1px solid red; */
? color: #999;
? font-size: smaller;
}
.drag {
? position: relative;
? background-color: #e8e8e8;
? width: 70%;
? height: 34px;
? line-height: 34px;
? text-align: center;
}
.handler {
? width: 40px;
? height: 32px;
? border: 1px solid #ccc;
? cursor: move;
}
.handler_bg {
? background: #fff
? ? url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==')
? ? no-repeat center;
}
.handler_ok_bg {
? background: #fff
? ? url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==')
? ? no-repeat center;
}
.drag_bg {
? background-color: #7ac23c;
? height: 34px;
? width: 0px;
}
.drag_text {
? position: absolute;
? top: 0px;
? width: 100%;
? color: #333;
? text-align: center;
? -moz-user-select: none;
? -webkit-user-select: none;
? user-select: none;
? -o-user-select: none;
? -ms-user-select: none;
}
</style>
来源:https://blog.csdn.net/Ezerbel/article/details/110195501
0
投稿
猜你喜欢
- 算法简介SOM网络是一种竞争学习型的无监督神经网络,将高维空间中相似的样本点映射到网络输出层中的邻近神经元。训练过程简述:在接收到训练样本后
- php开启openssl的方法,大多数情况下openssl是没有开启的,要想启用需要进行下简单的设置windows下开启方法:1: 首先检查
- 本文实例为大家分享了python实现两张图片拼接为一张图片并保存的具体代码,供大家参考,具体内容如下这里主要用Python扩展库pillow
- 本文实例为大家分享了python爬取哈尔滨天气信息的具体代码,供大家参考,具体内容如下环境:windows7python3.4(pip in
- 一、背景最近有个需求是从一个后台的留言网站爬取留言数据,后台管理网站必然涉及到了登录,登录就有个验证码的问题必须得解决,由于验证码是从后端生
- 首先:我们介绍一下socket什么是socket:1. socket 在操作系统中它是处于应用层与传输层的抽象层,它是一组操作起来非常简单的
- 前言今天给大家带来的是Vue 3 中的极致防抖/节流(含常见方式防抖/节流)这篇文章,文章中不仅会讲述原来使用的防抖或节流方式,还会带来新的
- scrapy框架之增量式爬虫一 、增量式爬虫什么时候使用增量式爬虫:增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础
- 引言在开发过程中,遇到过json数据组的字符串,需要解析json组,得到组内所有的信息。如下格式:[{"itemId":
- 本文做的是基于opencv将视频帧转成图片输出,由于一个视频包含的帧数过多,经常我们并不是需要它的全部帧转成图片,因此我们希望可以设置每隔多
- 官方文档https://github.com/LeetCode-OpenSource/vscode-leetcode/blob/master
- 匹配开头结尾字符功能^匹配字符串开头$匹配字符串结尾示例1:$需求:匹配163.com的邮箱地址email_list = [ "
- 前言bufio包实现了带缓冲的I/O,它封装了io.Reader和io.Writer对象,然后创建了另外一种对象(Reader或Writer
- mysql5.7.18zip版本在windows的安装,就是解压,初始化,然后做一些密码修改的设置即可使用,如果需要远程连接,需要更改用户表
- 使用 types 增强vscode中javascript代码提示功能微软的vscode编辑器是开发typescript项目的不二首选,其本身
- 代码如下:<% function CheckFileContent(FileName) dim 
- 我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事。我们可以通过export with rows=no来得到,但它的输出因为格式
- 最近的项目中大量涉及数据的预处理工作,对于ndarray的使用非常频繁。其中ndarray如何进行数值筛选,总结了几种方法。1.按某些固定值
- Vue-router是伴随着Vue框架出现的路由系统,它也是公认的一种优秀的路由解决方案。在使用Vue-router时候,我们常常会使用其自
- 一、Flask蓝图目录我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Fl