jquery的绿色拖动验证功能
在网上看到了一个这样的问题:那种像拖动滑块匹配图形的验证方式是怎么实现的?。
突然想到实现一个简单绿色拖动验证码的功能,在网上搜了下,有一个用jquery实现的该功能代码。
体验地址:http://yanshi.sucaihuo.com/jquery/8/897/demo/
其CSS代码:
HTML代码结构:
JS调用方式:
JS实现代码:
var handler = drag.find('.handler');
var drag_bg = drag.find('.drag_bg');
var text = drag.find('.drag_text');
var maxWidth = drag.width() - handler.width(); //能滑动的最大间距
//鼠标按下时候的x轴的位置
handler.mousedown(function(e){
isMove = true;
x = e.pageX - parseInt(handler.css('left'),10);
});
//鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
$(document).mousemove(function(e){
var _x = e.pageX - x;
if(isMove){
if(_x > 0 && _x <= maxWidth){
handler.css({'left': _x});
drag_bg.css({'width': _x});
}else if(_x > maxWidth){ //鼠标指针移动距离达到最大时清空事件
dragOk();
}
}
}).mouseup(function(e){
isMove = false;
var _x = e.pageX - x;
if(_x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
handler.css({'left': 0});
drag_bg.css({'width': 0});
}
});
//清空事件
function dragOk(){
handler.removeClass('handler_bg').addClass('handler_ok_bg');
text.text('验证通过');
drag.css({'color': '#fff'});
handler.unbind('mousedown');
$(document).unbind('mousemove');
$(document).unbind('mouseup');
}
};
})(jQuery);
VUE的绿色拖动验证功能
HTML结构:
CSS代码:
JS代码:
},data(){
return{
curW:0,isMove:false,//是否在运动
isDragOk:false,//是否拖动成功
maxWidth:0,//拖动的最大宽度
element:{},text:'拖动滑块验证',currentPos:{
x: 0,y: 0
}
}
},created(){
},mounted () {
var self = this;
this.element = document.querySelector('.handler');
this.getMaxWidth();
window.addEventListener('resize',function(){self.getMaxWidth()});
window.addEventListener('orientationchange',function(){self.getMaxWidth()});
this.element.addEventListener('touchstart',self.touchstartFun,false);
document.querySelector('body').addEventListener('touchmove',self.touchmoveFun,false);
document.querySelector('body').addEventListener('touchend',self.touchendFun,false);
this.element.addEventListener('mousedown',false);
document.querySelector('body').addEventListener('mousemove',false);
document.querySelector('body').addEventListener('mouseup',false);
(function drawAnimate() {
if( self.curW <= self.maxWidth){
window.requestAnimFrame(drawAnimate,1000/60);
self.curW = self.currentPos.x;
}else{
self.curW = self.currentPos.x = self.maxWidth;
}
})();
},watch:{
},methods:{
touchstartFun(e){
if(this.isDragOk){
e.preventDefault();
return;
}
this.isMove = true;
this.curW = this.currentPos.x = this.getCurrentPosition(e).x;
},touchmoveFun(e){
if(this.isMove && this.curW > 0 && this.curW < this.maxWidth){
this.currentPos.x = this.getCurrentPosition(e).x;
}
else if(this.isMove && this.curW >= this.maxWidth){
this.curW = this.currentPos.x = this.maxWidth;
this.isDragOk = true;
this.text = "验证通过";
}
},touchendFun(e){
this.isMove = false;
if(this.curW < this.maxWidth){
this.curW = this.currentPos.x = 0;
}
},getCurrentPosition(event){
var xPos,yPos,rect;
rect = document.getElementById('drag').getBoundingClientRect();
//event = event.originalEvent;
//判断是touch,还是鼠标事件
if (event.type.indexOf('touch') !== -1) {
xPos = event.touches[0].clientX - rect.left;
yPos = event.touches[0].clientY - rect.top;
}
//鼠标事件
else {
xPos = event.clientX - rect.left;
yPos = event.clientY - rect.top;
}
return {
x: xPos,y: yPos
}
},getMaxWidth(){
this.maxWidth = document.querySelector("#drag").clientWidth - document.querySelector(".handler").scrollWidth;
}
}
}
页面引用方式: