原生js实现拖动滑块验证

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>原生js实现拖动滑块验证</title>
    <style>
        #box{
            width:150px;
            height: 30px;
            position: relative;
            background: #ccc;
        }
        #box .btn{
            width:20px;
            height: 30px;
            box-sizing: border-box;
            border:1px solid #eee;
            text-align: center;
            line-height: 30px;
            position: absolute;
            left: 0;
            top: 0;
            z-index: 3;
            font-size: 18px;
            background: #fff;
            cursor: pointer;
            
        }
        #box .bg{
            width: 0;
            height: 100%;
            background: #f0f;
            position: absolute;
            left: 0;
            top: 0;
            z-index: 1;
        }
        #box .text{
            width: 100%;
            height: 100%;
            text-align: center;
            position: absolute;
            line-height: 30px;
            z-index: 2;
            font-size: 18px;
            left: 0;
            top: 0;
            margin: 0;
        }
    </style>
</head>
<body>
    <div id="box">
        <div class="btn">》</div>
        <p class="text">拖动滑块验证</p>
        <div class="bg"></div>
    </div>
</body>
</html>
<script type="text/javascript">
	var flag=false;//处理验证是否通过,默认为不通过
	var box=document.getElementById('box');//大盒子
	var btn=document.getElementsByClassName('btn')[0];//滑块
	var text=document.getElementsByClassName('text')[0];//文字
	var bg=document.getElementsByClassName('bg')[0];//背景
	//鼠标按下事件
	btn.onmousedown=function(e){
		var downX=e.clientX;//按下按钮后与窗口的x轴间距
		// 鼠标移动事件
		btn.onmousemove=function(e){
			var moveX=e.clientX-downX;//滑动的时候距离窗口的x轴的间距
			 //只有在大于0的时候才拖动,否则会出现反向拖动
			if(moveX>0){
				btn.style.left=moveX+'px';//滑块与左边的距离
				bg.style.width=moveX+'px'; //背景的宽度就是滑块距离左边的位置
				if(moveX>=(box.offsetWidth-btn.offsetWidth)){
					text.innerText="验证成功";
					text.style.color="#fff";
					btn.onmousemove=null;
					btn.onmousedown=null;
					flag=true;
				}
			}
		}
	}
	// 鼠标松开事件
	btn.onmouseup=function(){
            //为假的时候
            if(flag==false){
                btn.onmousemove=null;//清除事件
                btn.style.left=0;
                bg.style.width=0;
            }
            
    }
</script>
  1. getElementsByClassName()方法返回文档中所有指定类名的元素集合,代表一个有顺序的节点列表
  2. clientX,点击位置距离当前body可视区域的x,y坐标
  3. btn.οnmοusemοve=null;进行事件解除。这个有没有影响是看你实际开发中是否有别的也需要用到document.onmousedown情况。
    这个例子下,这句刚好没影响。但是最好建议是加上的
  4. 涉及到的事件:
    按下 onmousedown
    拖动 onmousemove
    松开 onmouseup
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值