纯js实现滑动条

效果图

在这里插入图片描述

页面构成

 <span class="box" id="box-lj-sgj">
				<i class="hd"></i>
				<i class="hdt"></i>
 </span>

css

.tab-con .box,.tab-con .box .hd,.tab-con .box .hdt{
		display: inline-block;
		*display: inline;
		zoom:1;
}
.tab-con .box {
	    cursor: pointer;
		width: 195px;
		height: 3px;
		background-color: #bdbdbd;
		position: relative;
		vertical-align: middle;
	}
.tab-con .box .hd {
	    width: 17px;
	    height: 18px;
	    background-color: #56a3fc;
	    border-radius: 6px;
	    position: absolute;
	    left: 0;
	    top: -8px;
	    cursor: pointer;
	    margin: 0;
}
.tab-con .box .hdt {
	    position: absolute;
	    top: 0;
	    left: 0;
	    height: 3px;
	    width: 0;
	    background-color: #56a3fc;
	    margin: 0;
}

js代码

function slider(obj,num){
	var box = document.getElementById(obj);
     	var hd = box.children[0];
     	var hdt = box.children[1];
     	//鼠标按下事件  只要鼠标按下时是在hd上触发就可以
     	hd.onmousedown = function(event){
     		var event = event || window.event;
     		//event.clientX 鼠标按下时的x坐标
     		//this.offsetLeft 圆点到box的距离
     		//leftval box距离左边边界的距离
     		var leftval = event.clientX - this.offsetLeft;
     		var _this = this;
     		//滑动事件 作用在document上,因为如果是作用在hd.onmousemove,滑动时可能会出现鼠标脱离hd范围(范围太小)而停止滑动,但是此时鼠标按下还没有弹起还处于滑动状态,所以就产生了bug
     		document.onmousemove = function(event){
     			var event = event || window.event;
     			//hd.style.left = _this.offsetLeft + "px";
     			//offsetLeft 是要有left值的前提下才产生,不能offsetLeft先赋值给left
     			hd.style.left = event.clientX - leftval + "px";

     			var far = parseInt(hd.style.left);
     			  
     			//临界值判断
     			if(far < 0){
     				hd.style.left = 0;
     			}
     			else if(far > 195){
     				hd.style.left = 195+"px";
     			}
     			
     			hdt.style.width = hd.style.left;
     			//保留两位小数
//   			var result = Math.floor((parseInt(hdt.style.width)/195 * num) * 100) / 100;
               //取整
     			var result = parseInt(parseInt(hdt.style.width)/195 * num);
     			//效果图上的476
     			box.nextSibling.nextSibling.value = result;
//   			console.log(box.nextSibling.nextSibling);
     			window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();//清除选中的文本
     		}
		//当鼠标弹起时清除滑动时运行的函数,因为滑动结束时鼠标可能不在hd上,所以用document监听弹起事件
	     	document.onmouseup = function(){
	     		document.onmousemove = null;
	     	}

     	}
     	//点击选择位置
     	box.onclick = function(event){
     		var event = event || window.event;
     		var boxWidth = event.clientX-this.offsetLeft;
     		if(boxWidth > 195){
     				boxWidth = 195;
     		}
     		hdt.style.width = hd.style.left = boxWidth + 'px';
     		var result = parseInt(parseInt(hdt.style.width)/195 * num);
     		box.nextSibling.nextSibling.value = result;
     		console.log(event.clientX-this.offsetLeft);
     	}
}

调用slider(obj,num)函数即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值