能否通过js代码动态的控制页面滚动条滑块的颜色显示与隐藏?例如控制(::-webkit-scrollbar-thumb)逐渐透明直至消失
1条回答 默认 最新
- 小P聊技术 2021-09-10 09:09关注
效果图
页面构成
<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)函数即可
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 宇视监控服务器无法登录
- ¥15 PADS Logic 原理图
- ¥15 PADS Logic 图标
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥15 DruidDataSource一直closing
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据