js實現的模擬滾動條效果
自帶的滾動調效果美觀度實在差強人意,在一般美觀度要求不高的網站還算是可以,但是如果美觀度要求很高的話,那麼就有點力不從心了,因為只有IE瀏覽器支援對滾動條的一些美化效果,如果想在谷歌或者火狐這樣的瀏覽器也實現比較美觀的效果,那麼就需要模擬實現滾動條效果,下面是一段來自網路的程式碼例項和大家分享一下,程式碼如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { margin: 0; padding: 0; } #mainBox { width: 250px; height: 500px; border: 1px #bbb solid; position: relative; overflow: hidden; margin: 50px auto; } #content { height:1000px; position: absolute; left: 0; top: 0; } .scrollDiv { width: 6px; position: absolute; top: 0; background: #666; border-radius: 10px; } /* 章節類別 */ .m-catr { padding:15px 0 10px 12px; *padding:15px 0 10px 14px; } .m-catr .tte { float:left; line-height:35px; text-align:left; font-size:14px; font-weight:bold; color:#5b98db; } #content dl { width:225px; float:left; margin-top:10px; } #content dl dt, .m-catr dl dd { float:left; width:100%; line-height:25px; text-align:left; color:#444; } #content dl dt { font-weight:bold; } #content dl dd { margin-left:12px; } </style> </head> <body> <div class="m-catr f-cb"> <div id="mainBox"> <div id="content"> <dl data-type="menu"> <dt>第一單元科學是系統化了的知識</dt> <dd> 1、千篇一律與千變萬化</dd> <dd> 2、雙語言時代</dd> <dd> 3、人們如何做出決策</dd> <dd> 4、培養獨立工作和獨立思考的人</dd> </dl> <dl data-type="menu"> <dt>第二單元科學是系統化了的知識</dt> <dd> 1、千篇一律與千變萬化</dd> <dd> 2、雙語言時代</dd> <dd> 3、人們如何做出決策</dd> <dd> 4、培養獨立工作和獨立思考的人</dd> </dl> <dl data-type="menu"> <dt>第三單元科學是系統化了的知識</dt> <dd> 1、千篇一律與千變萬化</dd> <dd> 2、雙語言時代</dd> <dd> 3、人們如何做出決策</dd> <dd> 4、培養獨立工作和獨立思考的人</dd> </dl> <dl data-type="menu"> <dt>第四單元科學是系統化了的知識</dt> <dd> 1、千篇一律與千變萬化</dd> <dd> 2、雙語言時代</dd> <dd> 3、人們如何做出決策</dd> <dd> 4、培養獨立工作和獨立思考的人</dd> </dl> <dl data-type="menu"> <dt>第五單元科學是系統化了的知識</dt> <dd> 1、千篇一律與千變萬化</dd> <dd> 2、雙語言時代</dd> <dd> 3、人們如何做出決策</dd> <dd> 4、培養獨立工作和獨立思考的人</dd> </dl> </div> </div> </div> <script type="text/javascript"> var doc=document; var _wheelData=-1; var mainBox=doc.getElementById('mainBox'); function bind(obj,type, handler) { var node=typeof obj=="string"?$(obj):obj; if(node.addEventListener) { node.addEventListener(type,handler,false); } else if(node.attachEvent) { node.attachEvent('on'+type,handler); } else { node['on'+type]=handler; } } function mouseWheel(obj,handler) { var node=typeof obj=="string"?$(obj):obj; bind(node,'mousewheel',function(event) { var data=-getWheelData(event); handler(data); if(document.all) { window.event.returnValue=false; } else { event.preventDefault(); } }); bind(node,'DOMMouseScroll',function (event){ var data=getWheelData(event); handler(data); event.preventDefault(); }); function getWheelData(event) { var e=event||window.event; return e.wheelDelta?e.wheelDelta:e.detail*40; } } function addScroll() { this.init.apply(this,arguments); } addScroll.prototype={ init:function(mainBox, contentBox,className){ var mainBox=doc.getElementById(mainBox); var contentBox=doc.getElementById(contentBox); var scrollDiv=this._createScroll(mainBox,className); this._resizeScorll(scrollDiv,mainBox,contentBox); this._tragScroll(scrollDiv,mainBox,contentBox); this._wheelChange(scrollDiv,mainBox,contentBox); this._clickScroll(scrollDiv,mainBox,contentBox); }, //建立滾動條 _createScroll:function(mainBox,className){ var _scrollBox=doc.createElement('div'); _scrollBox.setAttribute("id", "scrollBox"); var _scroll = doc.createElement('div'); var span = doc.createElement('span'); _scrollBox.appendChild(_scroll); _scroll.appendChild(span); _scroll.className = className; mainBox.appendChild(_scrollBox); return _scroll; }, //調整滾動條 _resizeScorll:function(element,mainBox,contentBox){ var p = element.parentNode; var conHeight = contentBox.offsetHeight; var _width = mainBox.clientWidth; var _height = mainBox.clientHeight; var _scrollWidth = element.offsetWidth; var _left = _width - _scrollWidth; p.style.width = _scrollWidth + "px"; p.style.height = _height + "px"; p.style.left = _left + "px"; p.style.position = "absolute"; p.style.background = "#ccc"; contentBox.style.width = (mainBox.offsetWidth - _scrollWidth) + "px"; var _scrollHeight = parseInt(_height * (_height / conHeight)); if(_scrollHeight >= mainBox.clientHeight) { element.parentNode.style.display = "none"; } element.style.height = _scrollHeight + "px"; }, //拖動滾動條 _tragScroll:function(element,mainBox,contentBox){ var mainHeight = mainBox.clientHeight; element.onmousedown=function(event){ var _this = this; var _scrollTop = element.offsetTop; var e = event || window.event; var top = e.clientY; //this.onmousemove=scrollGo; document.onmousemove = scrollGo; document.onmouseup = function (event) { this.onmousemove = null; } function scrollGo(event) { var e = event || window.event; var _top = e.clientY; var _t = _top - top + _scrollTop; if(_t > (mainHeight - element.offsetHeight)) { _t = mainHeight - element.offsetHeight; } if(_t <= 0) { _t = 0; } element.style.top = _t + "px"; contentBox.style.top = -_t * (contentBox.offsetHeight / mainBox.offsetHeight) + "px"; _wheelData = _t; } } element.onmouseover=function(){ this.style.background = "#444"; } element.onmouseout=function(){ this.style.background = "#666"; } }, //滑鼠滾輪滾動,滾動條滾動 _wheelChange:function(element, mainBox,contentBox){ var node=typeof mainBox=="string" ? $(mainBox):mainBox; var flag = 0, rate = 0, wheelFlag = 0; if (node) { mouseWheel(node, function (data) { wheelFlag += data; if(_wheelData >= 0) { flag = _wheelData; element.style.top = flag + "px"; wheelFlag = _wheelData * 12; _wheelData = -1; } else { flag = wheelFlag / 12; } if(flag <= 0) { flag = 0; wheelFlag = 0; } if(flag >= (mainBox.offsetHeight - element.offsetHeight)) { flag = (mainBox.clientHeight - element.offsetHeight); wheelFlag = (mainBox.clientHeight - element.offsetHeight) * 12; } element.style.top = flag + "px"; contentBox.style.top = -flag * (contentBox.offsetHeight / mainBox.offsetHeight) + "px"; }); } }, _clickScroll:function(element, mainBox, contentBox){ var p = element.parentNode; p.onclick = function (event) { var e = event || window.event; var t = e.target || e.srcElement; var sTop=document.documentElement.scrollTop>0?document.documentElement.scrollTop:document.body.scrollTop; var top = mainBox.offsetTop; var _top = e.clientY + sTop - top - element.offsetHeight / 2; if(_top <= 0) { _top = 0; } if(_top >= (mainBox.clientHeight - element.offsetHeight)) { _top = mainBox.clientHeight - element.offsetHeight; } if (t != element) { element.style.top = _top + "px"; contentBox.style.top = -_top * (contentBox.offsetHeight / mainBox.offsetHeight) + "px"; _wheelData = _top; } } } } new addScroll('mainBox', 'content', 'scrollDiv'); $(function(){ $("#scrollBox").hide(); $("#mainBox").mouseover(function(){ $("#scrollBox").show(); }).mouseout(function(){ $("#scrollBox").hide(); }); }); </script> </body> </html>
相關文章
- Vue.js+cube-ui(Scroll元件)實現類似頭條效果的橫向滾動導航條Vue.jsUI元件
- 隱藏滾動條保留滾動效果
- 前端實現文字滾動效果前端
- js、jQuery實現文字上下無縫輪播、滾動效果JSjQuery
- 使用js控制滾動條的位置JS
- js實現 web頁面的滾動條下拉時載入更多JSWeb
- 什麼是視差滾動?如何實現視差滾動的效果?
- 巢狀滾動效果實現討論巢狀
- 移動端模擬滾動
- css實現隱藏滾動條並可以滾動內容CSS
- 美化滾動條效果程式碼例項
- CSS3滾動條效果程式碼CSSS3
- 使用純 CSS 實現滾動陰影效果CSS
- unity 實現輪盤方式的按鈕滾動效果Unity
- 報表中怎樣實現滾動的公告效果
- OverScroll彈性滾動和慣性滾動效果的實現原理——CoordinatorLayout+Behavior
- Vue.js 桌面端自定義滾動條元件|vue美化滾動條VScrollVue.js元件
- anime.js 網頁動畫庫,輕鬆實現網頁數字滾動效果JS網頁動畫
- 兩種方式實現橫向滾動條
- 不可思議的純 CSS 滾動進度條效果CSS
- vue2.x自定義虛擬滾動條|vue美化滾動條元件VscrollVue元件
- H5頁面滾動阻尼效果實現H5
- JavaFx 實現水平滾動文字(跑馬燈效果)Java
- 實現報表滾動到底部翻頁效果
- Android 設定TextView滑動滾動條和滑動效果AndroidTextView
- selenium中JS如何處理滾動條JS
- Android 實現GridView的橫向滾動,實現仿京東秒殺效果AndroidView
- 類似微信首頁彈性滾動和慣性滾動效果的實現——OverScroll
- css實現修改預設滾動條樣式CSS
- 3種方法實現CSS隱藏滾動條並可以滾動內容CSS
- js之call,apply和bind的模擬實現JSAPP
- 原生JS利用transform實現banner的無限滾動JSORM
- 直播軟體搭建,Android實現文字滾動播放效果Android
- 模擬js中的call、apply和bind的實現JSAPP
- 封裝scroll.js 獲取滾動條的值封裝JS
- js實現圖片上下滾動background-positionJS
- 浪起來!使用 drawBitmapMesh 實現模擬水波紋效果
- 微信小程式功能之全屏滾動效果的實現程式碼微信小程式
- 如何實現報表滾動到底部進行翻頁的效果