利用JS實現(xiàn)自定義滾動條

一般默認(rèn)的滾動條會比較丑,有的需求會讓我們制作簡單漂亮的滾動條,用來代替系統(tǒng)默認(rèn)的滾動條,下面介紹使用簡單的js實現(xiàn)自定義滾動條的功能;
先來看一下效果圖:

效果圖

做這個效果的關(guān)鍵思路就是計算滾動組件和滾動區(qū)域的滾動比例
分成兩種情況,一種是鼠標(biāo)點擊小人物拖動,另一個是鼠標(biāo)滾輪滑動拖動
具體實現(xiàn)代碼如下

HTML結(jié)構(gòu)部分:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>標(biāo)題</title>
<meta name="keywords" content="">
<meta name="description" content="">
<style>
    *{margin:0; padding:0; list-style:none;}
    body{
        height:2000px;
    }
    .box1{
        width: 320px;
        height: 400px;
        background: #ccc;
        overflow: hidden;
        overflow-y: scroll;
        margin: 20px 0 0 100px;
    }
    .con1{
        font-size: 18px;
    }
    #out{
        width: 320px;
        height: 400px;
        background: url(bg1.png) 0 0 repeat-x;
        position: absolute;
        left: 500px;
        top: 20px;
        overflow: hidden;
    }
    #con{
        width: 280px;
        padding: 5px;
        font-size: 18px;
        position: absolute;
        left: 0px;
        top: 0px;
    }
    #box{
        width: 30px;
        height: 400px;
        position: absolute;
        right: 0;
        top: 0;
    }
    #drag{
        width: 30px;
        height: 53px;
        background: url(icon2.png) 0 0 no-repeat;
        position: absolute;
        left: 0px;
        top: 0px;
    }
</style>
</head>
<body>
<div class="box1">
    <p class="con1">據(jù)新華社電中航工業(yè)、國機集團(tuán)等8家央企6日在京簽約,在重要項目、科技轉(zhuǎn)化等相關(guān)領(lǐng)域開展重組合作整合,這將成為央企間產(chǎn)業(yè)聯(lián)合協(xié)作的新典范,也將開啟央企間產(chǎn)業(yè)重組合作整合的新階段。
相關(guān)合作內(nèi)容包括:中航工業(yè)和國機集團(tuán)共同發(fā)展八萬噸模鍛壓機項目;中航工業(yè)將房地產(chǎn)業(yè)務(wù)全部劃轉(zhuǎn)保利集團(tuán),中核建設(shè)和中國一重在高溫氣冷堆主設(shè)備制造領(lǐng)域合作,兵器工業(yè)、兵器裝備、中國國新對北方公司進(jìn)行股權(quán)重組。
國務(wù)院國資委主任肖亞慶在6日參加中央企業(yè)產(chǎn)業(yè)合作座談會上表示,下一步,國資委政策將加碼推動央企產(chǎn)業(yè)重組步伐,通過業(yè)務(wù)整合、資產(chǎn)重組、股權(quán)合作、資產(chǎn)置換、無償劃轉(zhuǎn)、協(xié)議轉(zhuǎn)讓、戰(zhàn)略聯(lián)盟、聯(lián)合開發(fā)等多途徑,加快央企間產(chǎn)業(yè)重組合作整合。
肖亞慶同時清晰地勾勒出國企改革兼并重組“路線圖”:通過產(chǎn)業(yè)重組,在突破關(guān)鍵技術(shù)、掌握核心資源,打造知名品牌等方面,實現(xiàn)產(chǎn)業(yè)重組合作“一加一大于二”的效果。肖亞慶同時透露,目前部分央企在牽頭技術(shù)創(chuàng)新戰(zhàn)略聯(lián)盟、設(shè)立創(chuàng)新投資基金、構(gòu)建創(chuàng)新孵化平臺等方面,取得了重大突破。據(jù)統(tǒng)計,央企牽頭國家及地方技術(shù)創(chuàng)新聯(lián)盟141個,50多家中央企業(yè)共發(fā)起和參與基金179只,構(gòu)建面向社會的創(chuàng)新孵化平臺57個,創(chuàng)業(yè)創(chuàng)新平臺27個。
“此次集中簽約,意味著央企重組的重心開始向資本、項目、產(chǎn)業(yè)板塊等內(nèi)部要素轉(zhuǎn)移?!敝袊髽I(yè)研究院首席研究員李錦說,未來,央企間產(chǎn)業(yè)重組合作整合將被更快地推進(jìn),央企內(nèi)部的各種要素將被再次優(yōu)化。</p>
</div>

<div id="out">
    <div id="con">據(jù)新華社電中航工業(yè)、國機集團(tuán)等8家央企6日在京簽約,在重要項目、科技轉(zhuǎn)化等相關(guān)領(lǐng)域開展重組合作整合,這將成為央企間產(chǎn)業(yè)聯(lián)合協(xié)作的新典范,也將開啟央企間產(chǎn)業(yè)重組合作整合的新階段。
相關(guān)合作內(nèi)容包括:中航工業(yè)和國機集團(tuán)共同發(fā)展八萬噸模鍛壓機項目;中航工業(yè)將房地產(chǎn)業(yè)務(wù)全部劃轉(zhuǎn)保利集團(tuán),中核建設(shè)和中國一重在高溫氣冷堆主設(shè)備制造領(lǐng)域合作,兵器工業(yè)、兵器裝備、中國國新對北方公司進(jìn)行股權(quán)重組。
國務(wù)院國資委主任肖亞慶在6日參加中央企業(yè)產(chǎn)業(yè)合作座談會上表示,下一步,國資委政策將加碼推動央企產(chǎn)業(yè)重組步伐,通過業(yè)務(wù)整合、資產(chǎn)重組、股權(quán)合作、資產(chǎn)置換、無償劃轉(zhuǎn)、協(xié)議轉(zhuǎn)讓、戰(zhàn)略聯(lián)盟、聯(lián)合開發(fā)等多途徑,加快央企間產(chǎn)業(yè)重組合作整合。
肖亞慶同時清晰地勾勒出國企改革兼并重組“路線圖”:通過產(chǎn)業(yè)重組,在突破關(guān)鍵技術(shù)、掌握核心資源,打造知名品牌等方面,實現(xiàn)產(chǎn)業(yè)重組合作“一加一大于二”的效果。肖亞慶同時透露,目前部分央企在牽頭技術(shù)創(chuàng)新戰(zhàn)略聯(lián)盟、設(shè)立創(chuàng)新投資基金、構(gòu)建創(chuàng)新孵化平臺等方面,取得了重大突破。據(jù)統(tǒng)計,央企牽頭國家及地方技術(shù)創(chuàng)新聯(lián)盟141個,50多家中央企業(yè)共發(fā)起和參與基金179只,構(gòu)建面向社會的創(chuàng)新孵化平臺57個,創(chuàng)業(yè)創(chuàng)新平臺27個。
“此次集中簽約,意味著央企重組的重心開始向資本、項目、產(chǎn)業(yè)板塊等內(nèi)部要素轉(zhuǎn)移?!敝袊髽I(yè)研究院首席研究員李錦說,未來,央企間產(chǎn)業(yè)重組合作整合將被更快地推進(jìn),央企內(nèi)部的各種要素將被再次優(yōu)化。</div>
    <div id="box">
        <p id="drag"></p>
    </div>
</div>
</body>

javascript部分:

    var out=document.getElementById('out');
    var con=document.getElementById('con');
    var box=document.getElementById('box');
    var drag=document.getElementById('drag');
    //鼠標(biāo)點擊拖動部分
    drag.onmousedown=function (ev){
        var e=ev||window.event;
        if (e.preventDefault) {
            e.preventDefault();
        } else{
            e.returnValue=false;
        };
        //鼠標(biāo)點擊位置距離拖動組件頂部的距離
        var d_bkt=e.clientY-drag.offsetTop;
        //鼠標(biāo)拖動函數(shù)
        document.onmousemove=function (ev){
            var e=ev||window.event;
            var top=e.clientY-d_bkt;
            if (top<=0) {
                top=0;
            };
            if (top>=box.clientHeight-drag.clientHeight) {
                top=box.clientHeight-drag.clientHeight;
            };
            //計算滾動比例
            var scale=top/(box.clientHeight-drag.clientHeight);
            //滾動區(qū)域的滾動距離
            var cony=scale*(con.clientHeight-out.clientHeight);
            drag.style.top=top+'px';
            con.style.top=-cony+'px';
            console.log(top);
        }
        document.onmouseup=function (){
            document.onmousemove=null;
        }
    }
    //以下為鼠標(biāo)滾輪事件
    var str=window.navigator.userAgent.toLowerCase();
    if (str.indexOf('firefox')!=-1) {//火狐瀏覽器
        out.addEventListener('DOMMouseScroll',function (e){
            e.preventDefault();//阻止窗口默認(rèn)的滾動事件
        if (e.detail<0) {//下滾
            var t=con.offsetTop+20;
            if (t>=0) {
                t=0;
            };
            if (t<=-(con.clientHeight-out.clientHeight)) {
                t=-(con.clientHeight-out.clientHeight);
            };
            //計算滾動條和滾動區(qū)域的滾動比例
            var scale=t/(con.clientHeight-out.clientHeight);
            //滾動區(qū)域的滾動距離
            var top=scale*(box.clientHeight-drag.clientHeight);
            con.style.top=t+'px';
            drag.style.top=-top+'px';
        };
        if (e.detail>0) {//上滾
            var t=con.offsetTop-20;
            if (t>=0) {
                t=0;
            };
            if (t<=-(con.clientHeight-out.clientHeight)) {
                t=-(con.clientHeight-out.clientHeight);
            };
            var scale=t/(con.clientHeight-out.clientHeight);
            var top=scale*(box.clientHeight-drag.clientHeight);
            con.style.top=t+'px';
            drag.style.top=-top+'px';
        };
        },false);
    } else{//非火狐瀏覽器
        out.onmousewheel=function (ev){
            var e=ev||window.event;
            if (e.preventDefault) {
                e.preventDefault();
            } else{
                e.returnValue=false;
            };
            if (e.wheelDelta>0) {//下滾
            var t=con.offsetTop+20;
            if (t>=0) {
                t=0;
            };
            if (t<=-(con.clientHeight-out.clientHeight)) {
                t=-(con.clientHeight-out.clientHeight);
            };
            var scale=t/(con.clientHeight-out.clientHeight);
            var top=scale*(box.clientHeight-drag.clientHeight);
            con.style.top=t+'px';
            drag.style.top=-top+'px';
        };
        if (e.wheelDelta<0) {//上滾
            var t=con.offsetTop-20;
            if (t>=0) {
                t=0;
            };
            if (t<=-(con.clientHeight-out.clientHeight)) {
                t=-(con.clientHeight-out.clientHeight);
            };
            //設(shè)置滾動比例
            var scale=t/(con.clientHeight-out.clientHeight);
            //設(shè)置滾動區(qū)域的滾動距離
            var top=scale*(box.clientHeight-drag.clientHeight);
            con.style.top=t+'px';
            drag.style.top=-top+'px';
        };
        }
    };

2017-03-13

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評論 25 709
  • 人性都是有缺憾的,只要還活著,就必定會要去忍受這些,海納百川,有容乃大,胸懷大一點,煩惱就會少一點,然而我們都不是...
    安小茗閱讀 212評論 0 0
  • 先來飽個眼福吧! 1.吃對 營養(yǎng)公式:適度的優(yōu)質(zhì)蛋白質(zhì)食品+低脂食品+高碳水化合物食品 糖類供能比例應(yīng)該占到總能量...
    AJJI愛活力閱讀 247評論 0 0
  • 說得清的,都不叫愛情。忘得了的,都不是遺憾。 有戈壁就應(yīng)有綠洲,有滄海就應(yīng)有礁嶼,前路遠(yuǎn)且長,總有些單飛的鳥兒乏了...
    道無顯隱閱讀 290評論 0 0
  • 1 記得本科時候 數(shù)學(xué)分析課 經(jīng)常在上午的10-12.00 那個時候大家一般都處于饑餓狀態(tài) 至少當(dāng)時的我是那個樣子...
    懿人行走閱讀 355評論 0 0

友情鏈接更多精彩內(nèi)容