亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用js實現一個簡單的滾動條過程解析

2019-11-19 10:50:27
字體:
來源:轉載
供稿:網友

當我們給元素加上 overflow: auto; 的時候,就會出現滾動條,然而瀏覽的不同,滾動條的樣式大不一樣,有些甚至非常丑。

于是就想著自己寫一個滾動條,大概需要弄清楚一下這幾個點:

1、滾動條 bar 是根據內容的多少,高度不一樣的,這個需要動態的計算

2、滾動條 bar 的 top 位置 和 內容scrollTop 的關系。

思路:

使用嵌套的布局,如下:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <style type="text/css">      *{        padding: 0;        margin: 0;      }      .wrap{        width: 400px;        height: 400px;        border: 2px solid deeppink;        margin: 0 auto;        overflow: hidden;        position: relative;      }      .box-middle{        height: 100%;        overflow: auto;        width: 200%;      }      .box{        width: 50%;      }      .bar{        background: #000;        width: 10px;        position: absolute;        top: 0;        right: 0;      }      .s1{        height: 400px;        background: pink;      }      .s2{        height: 400px;        background: deeppink;      }      .s3{        height: 400px;        background: deepskyblue;      }    </style>  </head>  <body>    <div class="wrap" id="wrap">      <div class="box-middle" id="boxMidle">        <div class="box" id="content">          <div class="s1">內容1</div>          <div class="s2">內容2</div>          <div class="s3">內容3</div>        </div>      </div>      <div class="bar" id="bar"></div>    </div>       </body></html>

wrap 為最外層,給overflow:hidden;。

box-middle 是中間層,也是有滾動條的一層,可以寬度給多一點,這樣就看不見滾動條了。

box就是內容層,通過js,計算使得 box 的寬度和wrap 保持一致,這樣就完全看不見滾動條了

bar 為滾動條

寫js之前,首先要弄懂一下三個屬性:

offsetHeight : height + padding + borderclientHeight : height + paddingscrollHeight : 內容的高度(所有子元素高度和) + padding

1、計算比例:

bar的高度 / wrap的高度 = wrap的高度 / wrap 內容部子元素的高度和 ; 此時忽略 wrap 的padding:0

bar的top / wrap的scrollTop = wrap的高度 / wrap 內容部子元素的高度和 ;

需要注意,當比例 的 值 小于 1 的時候,說明 這個時候沒有出現滾動條。

知道算法之后,寫代碼就簡單很多,普通版代碼如下:

var $wrap = document.getElementById("wrap");var $boxMidle = document.getElementById("boxMidle");var $content = document.getElementById("content");var $bar = document.getElementById("bar");$content.style.width = $wrap.clientWidth + "px"; //內容的寬度var rate = $boxMidle.clientHeight/ $boxMidle.scrollHeight; //滾動條高度的比例,也是滾動條top位置的比例 var barHeight = rate * $boxMidle.clientHeight; //滾動條的 bar 的高度if(rate < 1){  //需要出現滾動條,并計算滾動條的高度  $bar.style.height = barHeight + "px";}else{  //不需要出現滾動條  $bar.style.display = "none";}$boxMidle.onscroll = function(e){  console.log("offsetHeight"+this.offsetHeight); //height + padding + border  console.log("clientHeight"+this.clientHeight); // height + padding  console.log("scrollHeight"+this.scrollHeight); //內容的高度(所有子元素高度和) + padding  console.log(this.scrollTop);  $bar.style.top = this.scrollTop*rate + "px";}

使用面向對象版:

function ScrollBar(opt){  var me = this;  me.$wrap = document.getElementById(opt.wrap);  me.$boxMidle = document.getElementById(opt.boxMidle);  me.$content = document.getElementById(opt.content);  me.$bar = document.getElementById(opt.bar);  me.init();  me.$boxMidle.onscroll = function(e){    //console.log("offsetHeight"+this.offsetHeight); //content + padding + border    //console.log("clientHeight"+this.clientHeight); // content + padding    //console.log("scrollHeight"+this.scrollHeight); //內容的高度 + padding    console.log(this.scrollTop);    me.scrollToY(this.scrollTop * me.rate)  }}ScrollBar.prototype.init = function(){  this.$content.style.width = this.$wrap.clientWidth + "px"; //內容的寬度  this.rate = this.$boxMidle.clientHeight/this.$boxMidle.scrollHeight; //滾動條高度的比例,也是滾動條top位置的比例   this.barHeight = this.rate * this.$boxMidle.clientHeight; //滾動條的 bar 的高度  if(this.rate < 1){    //需要出現滾動條,并計算滾動條的高度    this.$bar.style.height = this.barHeight + "px";  }else{    //不需要出現滾動條    this.$bar.style.display = "none";  }}ScrollBar.prototype.scrollToY = function(y){  if(this.rate < 1){    this.$bar.style.top = y + 'px';  }} var obj = new ScrollBar({"wrap":"wrap","boxMidle":"boxMidle","content":"content","bar":"bar"});

最后看一下效果:

雖然效果很丑,但是可控,自己調一下就可以了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品美女视频| 日韩一区二区欧美| 色琪琪综合男人的天堂aⅴ视频| 91久久久久久国产精品| 国产69精品久久久久99| 久久久久久久久91| 57pao国产成人免费| 日韩va亚洲va欧洲va国产| 久久综合色影院| 日韩视频―中文字幕| 国产一区二区免费| 中文字幕少妇一区二区三区| 国产精品96久久久久久又黄又硬| 国产精品一区久久久| 7777精品视频| 亚洲男人天堂2024| 久久久久久91| 久久亚洲精品网站| 国产狼人综合免费视频| 成人综合国产精品| 成人免费看吃奶视频网站| 欧美精品18videos性欧美| 久久综合久中文字幕青草| 成人激情视频小说免费下载| 国产成人精品视频在线| 欧美野外猛男的大粗鳮| 国产在线一区二区三区| 欧美性xxxx极品hd欧美风情| 最新日韩中文字幕| 久久久免费电影| 成人h视频在线| 日韩美女在线看| 成人做爰www免费看视频网站| 日韩在线观看网站| 国产精品久久久久久久久久| 欧美高清电影在线看| 欧美在线一区二区视频| 欧美激情视频一区| 亚洲天堂av在线免费观看| 欧美最顶级丰满的aⅴ艳星| 欧美日韩性生活视频| 成人午夜一级二级三级| 久久久久久久久网站| 亚洲欧美日韩中文在线| 欧美另类老肥妇| 日韩一区二区三区在线播放| 日韩国产激情在线| 韩剧1988在线观看免费完整版| 欧美激情18p| 国产精品午夜国产小视频| 国产主播在线一区| 久久久久999| 精品福利一区二区| 6080yy精品一区二区三区| 韩国一区二区电影| 国产一区二区三区久久精品| 国产精品久久一| 国产极品精品在线观看| 欧美日本高清一区| 欧美成人激情在线| 日本sm极度另类视频| 精品国内亚洲在观看18黄| 中文字幕欧美精品日韩中文字幕| 91精品国产91久久久久久最新| 亚洲视频网站在线观看| 成人激情春色网| 亚洲精品久久在线| 亚洲电影免费观看高清完整版在线| 亚洲人a成www在线影院| 国产成人+综合亚洲+天堂| 97免费中文视频在线观看| 精品动漫一区二区三区| 亚洲人成啪啪网站| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美国产va在线影院| 欧美性xxxxxx| 国产亚洲精品久久久| 欧美视频在线观看免费网址| 国产精自产拍久久久久久蜜| 成人日韩在线电影| 欧美日韩国产成人高清视频| 亚洲欧美色图片| 日韩中文字幕在线| 欧美高清性猛交| 亚洲国产精品成人va在线观看| 欧美一级大片在线免费观看| 欧美自拍视频在线观看| 久久影院资源网| 国产精品视频专区| 欧美中文字幕视频在线观看| 日韩高清电影免费观看完整| 国产69精品久久久久99| 日韩精品视频免费| 日韩福利伦理影院免费| 亚洲毛片一区二区| 欧美亚洲另类制服自拍| 欧美成人一二三| 欧美大片在线看免费观看| 亚洲视频电影图片偷拍一区| 午夜欧美大片免费观看| 中文字幕在线观看日韩| 日韩欧美在线视频| 久久精品国产一区| 国产精品久久久久久久9999| 91最新在线免费观看| 亚洲欧美资源在线| 国产精品自拍视频| 日本不卡免费高清视频| 亚洲国产精品嫩草影院久久| 午夜精品久久久久久久白皮肤| 日韩欧美国产中文字幕| 91理论片午午论夜理片久久| 精品免费在线视频| 欧美日韩国产综合新一区| 久久精品国产欧美亚洲人人爽| 精品自拍视频在线观看| 色偷偷888欧美精品久久久| 亚洲精品综合久久中文字幕| 欧美在线激情网| 久久久久久久久久久免费| 日韩精品极品毛片系列视频| 亚洲激情免费观看| 久久婷婷国产麻豆91天堂| 欧美另类69精品久久久久9999| 主播福利视频一区| 亚洲国产成人精品久久久国产成人一区| 91精品国产91久久久久福利| 亚洲精品乱码久久久久久按摩观| 日本最新高清不卡中文字幕| 日韩av免费在线| 精品视频—区二区三区免费| 欧美成人精品三级在线观看| 亚洲精品视频播放| 欧美在线影院在线视频| 日韩精品在线第一页| 黄网动漫久久久| 久久久久久久久久国产| 一区二区亚洲精品国产| 欧美激情一级欧美精品| 国产ts一区二区| 精品露脸国产偷人在视频| 在线视频亚洲欧美| 91黑丝在线观看| 久久久久久久香蕉网| 欧美一级片一区| 成人激情视频小说免费下载| 精品中文视频在线| 国产在线精品自拍| 欧美激情xxxx性bbbb| 欧美精品成人91久久久久久久| 国产美女久久精品香蕉69| 欧美特级www| 久久久久久亚洲精品中文字幕| 精品日韩美女的视频高清| 亚洲电影在线看| 久久香蕉国产线看观看网| 国产精品久久久久久久久久ktv| 精品国模在线视频| 综合久久五月天| 国产日韩欧美自拍| 亚洲一区二区三区四区视频| 成人网欧美在线视频| 日韩精品亚洲元码| 亚洲另类图片色|