javascript滚动条自定义

本文将探讨如何使用JavaScript和CSS来实现自定义浏览器滚动条的外观和行为,以提升网页用户体验。通过调整滚动条的颜色、宽度、滑块等属性,可以使其更好地融入网站设计。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
          margin:0;
          padding:0;
        }
        .box{
          width:300px;
          height:500px;
          border:1px solid black;
          margin:50px;
          position:relative;
          overflow:hidden;
        }
        .content{
          padding:5px 18px 5px 5px;
          position:absolute;
          top:0;
          left:0;
        }
        .scroll{
          width:18px;
          height:100%;
          position:absolute;
          top:0;
          right:0;
          background-color:#eee;
        }
        .bar{
          height:100px;
          width:100%;
          position:absolute;
          top:0;
          left:0;
          background-color:plum;
          border-radius:10px;
          cursor:pointer;
        }
    </style>
</head>
<body>
<div class="box" id="box">
    <div class="content" id="content">
        先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
        宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
        侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
        将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
        亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
        臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
        先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
        愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
        今当远离,临表涕零,不知所言。
    </div>
    <div id="scroll" class="scroll">
         <div class="bar" id="bar"><div>
    </div>
</div>
<script>
     function my$(id){
        return document.getElementById(id);
     }
     //获取最外面的div
     var box=my$("box");
     //获取文字的div
     var content=my$("content");
     //获取封装滚动条的div
     var scroll=my$("scroll");
     //获取滚动条
     var bar=my$("bar");
     
     //设置滚动条的高度
     //滚动条的高/封装滚动条的div的高=box的高/文字div的高
     //滚动条的高=封装滚动条的div的高*box的高/文字div的高
     var barHeight=scroll.offsetHeight*box.offsetHeight/content.offsetHeight;
     bar style.height=barHeight+"px";
     
     //移动滚动条
     bar.onmouserdown=function(e){
        var spaceY=e.clientY-bar.offsetTop;
        document.onmousemove=function(e){
           var y=e.clientY-spaceY;
           //最小值
           y=y<0?0:y;
           //最大值
           y=y?scroll.offsetHeight-bar.offsetHeight?scroll.offsetHeight-bar.offsetHeight:y;
           bar.style.top=y+"px";
           
           //设置鼠标移动的时候,文字不被选中
           window.getSelection?window.getSelection().removeAllRanges():document.selection.empty();
           //滚动条的移动距离/文字div的移动距离=滚动条最大的移动距离/文字div最大的移动距离
           //文字div的移动距离=滚动条的移动距离*文字div最大的移动距离/滚动条最大的移动距离
           var moveY=y*(content.offsetHeight-box.offsetHeight)/(scroll.offsetHeight-bar.offsetHeight);
           //设置文字div的移动距离
           content.style.marginTop=-moveY+"px";
        };
     };
     document.onmouseup=function(){
        //鼠标抬起的时候,取消移动事件
        document.onmousemove=null;
     };
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值