标签:hidden get default mouse color listener ali detail relative
今天听到别人说自定义滚动条,所以就在吃饭的时间写了个
html部分
<div class="out" id="out"> <div class="inner" id="inner"> <div class="box">1</div> <div class="box">2</div> <div class="box">3</div> <div class="box">4</div> <div class="box">5</div> <div class="box">6</div> <div class="box">7</div> <div class="box">8</div> <div class="box">9</div> <div class="box">10</div> <div class="box">11</div> <div class="box">12</div> </div> <div class="scrollbar" id="scrollbar"> <div class="scrollbtn" id="scrollbtn"></div> </div> </div>
css部分
<style> *{ padding:0;margin:0;border:0; } .out{ width:300px;height:600px; margin:20px auto; background:#866C51; overflow: hidden; position: relative; } .inner{ width:300px;height:auto; margin:0px auto; background:#866C51; } .box{ width:100%;height:200px; text-align:center; line-height:200px; } .box:nth-child(1){ background: #11ff4c; } .box:nth-child(2){ background: #19faff; } .box:nth-child(3){ background: #ff831e; } .box:nth-child(4){ background: #111111; } .box:nth-child(5){ background: #ff6dd2; } .box:nth-child(6){ background: #223aff; } .box:nth-child(7){ background: #111111; } .box:nth-child(8){ background: #d9e8ff; } .box:nth-child(9){ background: #ff80d8; } .box:nth-child(10){ background: #a033ff; } .box:nth-child(11){ background: #2b33ff; } .box:nth-child(12){ background: #17ffda; } .scrollbar{ width:10px;height:600px; background:#66513B; position: absolute; right:0;top:0; } .scrollbtn{ width:100%;height:50px; background:#BCA68E; border-radius:20px; position: absolute; top: 0px; } </style>
js部分
var inner=document.getElementById(‘inner‘); var scrollbtn=document.getElementById(‘scrollbtn‘); var out=document.getElementById(‘out‘); var scrollbar=document.getElementById(‘scrollbar‘); var bili=inner.offsetHeight/out.offsetHeight;//盒子和内容的比例 scrollbtn.style.height=scrollbar.offsetHeight/bili+‘px‘;//内容的高 var zdh=scrollbar.offsetHeight-scrollbtn.offsetHeight;//最大的top值 var spend=20 scrollbtn.onmousedown = function(e){ var ev=e||window.event; var y=ev.clientY-scrollbtn.offsetTop;//鼠标点击时滚动条的位置 document.onmousemove = function (e) { var ev=e||window.event; var tops=ev.clientY-y;//滚动时top值 if(tops<0){ tops=0 }else if(tops>zdh){ tops=zdh } scrollbtn.style.top=tops+‘px‘; inner.style.marginTop=-tops*bili+"px"; } document.onmouseup = function () { document.onmousemove = null; document.onmouseup = null; } } //检测鼠标滚动 function mouseWheel(obj,upfun,downfun){ if(obj.addEventListener){ obj.addEventListener("mousewheel",fn); obj.addEventListener("DOMMouseScroll",fn) }else{ obj.attachEvent("onmousewheel",fn); } function fn(e){ var ev=e||window.event; //鼠标滚轮滚动的方向 var val=ev.detail||ev.wheelDelta; if(val==-3||val==120){ upfun();//向上滚 }else if(val==3||val==-120){ downfun();//向下滚 } if(ev.preventDefault){ ev.preventDefault(); }else{ ev.returnValue=false; } } } mouseWheel(out,function(){ if(scrollbtn.offsetTop<=0){ scrollbtn.style.top=0+‘px‘; inner.style.marginTop=0+‘px‘; }else{ inner.style.marginTop=inner.offsetTop+spend+"px"; scrollbtn.style.top=scrollbtn.offsetTop-spend/bili+‘px‘; } },function(){ if(scrollbtn.offsetTop>=zdh){ scrollbtn.style.top=zdh+‘px‘; inner.style.marginTop=-zdh*bili+‘px‘; }else{ inner.style.marginTop=inner.offsetTop-spend+"px"; scrollbtn.style.top=scrollbtn.offsetTop+spend/bili+‘px‘; } })
效果如下
标签:hidden get default mouse color listener ali detail relative
原文地址:https://www.cnblogs.com/aSnow/p/9045388.html