定义骨架,写html和css
html部分
{{ confirmWords }}
css部分: 由于担心图片源的问题,所以写成了base64的图片
实现滑动拖拽校验
定义参数
data() {
return {
beginClientX:0, // 距离屏幕左端距离
mouseMoveStata:false, // 触发拖动状态 判断
maxwidth:'', // 拖动最大宽度,依据滑块宽度算出来的
confirmWords:'拖动滑块验证', // 滑块文字
confirmSuccess:false // 验证成功判断
}
}
1. 在mounted里面,根据滑块宽度计算可拖动最大宽度以及监听手指的触摸和离开事件
mounted() {
// 根据滑块宽度计算可拖动最大宽度
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)
}
2. 编写手指滑动的事件和手指离开的事件
- mousemove事件
首先判断是否触发拖动状态,然后计算拖动的距离和模块距离,实时赋值
//验证成功函数
mouseMoveFn(e){
if(this.mouseMoveStata){
let width = e.clientX - this.beginClientX
if(width > 0 && width <= this.maxwidth) {
document.getElementsByClassName('handler')[0].style.left = width + 'px'
document.getElementsByClassName('drag_bg')[0].style.width = width + 'px'
}else if(width > this.maxwidth) this.successFunction()
}
},
- mouseup事件
把拖动状态改成false,并且把滑块移到对应的手指落下位置上
moseUpFn(e) {
this.mouseMoveState = !1 // 修改状态
const 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'
}
}
在上面html部分的handler块里,定义了mousedown事件(mousedownFn($event))
需要阻止文件选中等浏览器默认行为,并把触发拖动状态这个阈值打开,记录手指移动的距离
mousedownFn:function (e) {
e.preventDefault && e.preventDefault() // 阻止文字选中等 浏览器默认事件
this.mouseMoveStata = true // 把触发拖动状态这个阈值打开
this.beginClientX = e.clientX // 记录手指移动的距离
},
至此,功能就完成了。。
完整的JS代码如下
最后最后:
公众号:小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西
有兴趣的小伙伴欢迎关注我哦,我是:何小玍。 大家一起进步鸭