自定義滾動條

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            width: 300px;
            height: 500px;
            border: 1px solid red;
            margin: 100px;
            position: relative;
        }

        .content {
            height: auto;
            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 {
            width: 100%;
            height: 100px;
            background-color: red;
            cursor: pointer;
            border-radius: 10px;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>

<body>
    <div class="box" id="box">
        <div class="content">
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分
            文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分文字內容部分

        </div>
        <div class="scroll">
            <div class="bar"></div>
        </div>
    </div>
</body>

</html>
<script>
    //獲取dom對象
    var box = document.getElementById("box");
    var content = box.children[0];
    var scroll = box.children[1];
    var bar = scroll.children[0];
    // 滾動條初始狀態(tài)的長度 =  (盒子高度 / 內容高度 X 盒子高度)
    bar.style.height = box.offsetHeight / content.offsetHeight * box.offsetHeight + "px";
    // 鼠標按下事件
    bar.onmousedown = function (e) {
        var e = e || window.e;
        // 鼠標按下時距離滾動條上方的位置
        var y = e.clientY - this.offsetTop;
        // 鼠標移動事件
        document.onmousemove = function (e) {
            var e = e || window.e;
            // 滾動條移動距離
            var barTop = e.clientY - y;
            // 如果距離上方距離小于0,無法移動
            if (barTop < 0) {
                barTop = 0;
            }
            // 大于盒子的高度 - 滾動條的高度也無法移動
            if (barTop > box.offsetHeight - bar.offsetHeight) {
                barTop = box.offsetHeight - bar.offsetHeight
            }
            bar.style.top = barTop + "px";
            //禁止選擇文字
            window.getSelection() ? window.getSelection().removeAllRanges() : document.selection.empty();
            // 內容盒子移動的距離 =(內容的高度 - 盒子的高度)/ (盒子的高度 - 滾動條的高度)*  滾動條移動的距離
            var cy = (content.offsetHeight - box.offsetHeight)  / (box.offsetHeight - bar.offsetHeight) * barTop;
            content.style.top = - cy + "px";
        }
        // 鼠標彈起清除移動事件
        document.onmouseup = function () {
            this.onmousemove = null;
        }
    }
</script>

兩個算法:

  • 滾動條初始狀態(tài)的長度 = 盒子高度 / 內容高度 * 盒子高度
  • 內容盒子移動的距離 =(內容的高度 - 盒子的高度)/ (盒子的高度 - 滾動條的高度)* 滾動條移動的距離沪斟。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弛作,隨后出現(xiàn)的幾起案子胁编,更是在濱河造成了極大的恐慌,老刑警劉巖荆责,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亚脆,居然都是意外死亡做院,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來键耕,“玉大人寺滚,你說我怎么就攤上這事∏郏” “怎么了独令?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雀扶。 經(jīng)常有香客問我屑埋,道長,這世上最難降的妖魔是什么惋嚎? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任杠氢,我火速辦了婚禮,結果婚禮上另伍,老公的妹妹穿的比我還像新娘鼻百。我一直安慰自己,他們只是感情好摆尝,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布温艇。 她就那樣靜靜地躺著,像睡著了一般堕汞。 火紅的嫁衣襯著肌膚如雪中贝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天臼朗,我揣著相機與錄音邻寿,去河邊找鬼。 笑死视哑,一個胖子當著我的面吹牛绣否,可吹牛的內容都是我干的。 我是一名探鬼主播挡毅,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蒜撮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了跪呈?” 一聲冷哼從身側響起段磨,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耗绿,沒想到半個月后苹支,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡误阻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年债蜜,在試婚紗的時候發(fā)現(xiàn)自己被綠了晴埂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡寻定,死狀恐怖儒洛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情狼速,我是刑警寧澤琅锻,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站向胡,受9級特大地震影響恼蓬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜捷枯,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望专执。 院中可真熱鬧淮捆,春花似錦、人聲如沸本股。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拄显。三九已至苟径,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躬审,已是汗流浹背棘街。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留承边,地道東北人遭殉。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像博助,于是被迫代替她去往敵國和親险污。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 有沒有覺得瀏覽器自帶的原始滾動條很不美觀富岳,同時也有看到很多網(wǎng)站的自定義滾動條顯得高端蛔糯,就連chrome32.0開發(fā)...
    65_劉璐閱讀 9,607評論 1 4
  • 滾動條組成: ::-webkit-scrollbar 滾動條整體部分 ::-webkit-scrollbar-th...
    mindy1031閱讀 2,209評論 0 1
  • 現(xiàn)在正在重構一個已經(jīng)有的后管項目,今天看到這個滾動條實在是有點丑窖式,想給換一下蚁飒。實話說自己并不是一個很有經(jīng)驗的前端開...
    蚊子爸爸閱讀 2,106評論 2 12
  • 哪些地方會出現(xiàn)滾動條 滾動條通常會出現(xiàn)在這些地方 1、iframe 2萝喘、任何元素的設置成塊元素飒箭,overflow設...
    超愛吃小龍蝦閱讀 987評論 0 2
  • 不知道你以后是不是會一直記著我 亦不知道你是不是會看到這段文字 但還是抱著一絲幻想寫下了它 那天早上狼电,看到你那一句...
    朋兒Bodhi閱讀 347評論 0 0