function stopDefault(e) {// 绂佹娴忚鍣ㄩ粯璁よ涓 var e= e || event; if (e.preventDefault) { e.preventDefault(); } else { window.event.returnValue = false; } return false; } //妯℃嫙婊氬姩鏉 function ImitateScroll(scrollBox, scrollObj, scrollBar, scrollBtn) {//scrollBox琚粴鍔ㄥ璞″妗嗭紝scrollObj琚粴鍔ㄥ璞★紝scrollBar婊氬姩鏉″潡锛屾粴鍔ㄦ潯鎸夐挳 this.init(scrollBox, scrollObj, scrollBar, scrollBtn); } ImitateScroll.prototype = { scale:function() {//琚粴鍔ㄥ璞′笌琚粴鍔ㄥ璞″妗嗙殑楂樺害姣斾緥璁$畻 return (this.scrollObj.scrollHeight/this.scrollBox.clientHeight); }, scrollBtnMouseDown:function(ev) {//婊氬姩鎸夐挳鎸変笅 var _this = this; var disY = ev.clientY - this.scrollBtn.offsetTop;//榧犳爣Y鍧愭爣璺濈婊氬姩鎸夐挳澶撮儴鐨勮窛绂 var maxTop = this.scrollBar.clientHeight - this.scrollBtn.offsetHeight; document.onmousemove = function(ev) { if (document.all) {//ie 绂佹閫夋嫨 document.body.onselectstart = new Function("return false"); } else {// chrome, ff document.body.className = "chromeOnselectstart"; } var oEvent = ev || event; var t = oEvent.clientY - disY; t = t>maxTop ? maxTop : t; t = t<0 ? 0 : t; _this.scrollBtn.style.top = t + "px"; //_this.scrollObj.style.top = -t / _this.scrollBar.clientHeight * _this.scrollObj.scrollHeight + "px"; _this.scrollObj.style.top = -t / (_this.scrollBar.clientHeight-_this.scrollBtn.offsetHeight) * (_this.scrollObj.scrollHeight-_this.scrollBox.clientHeight) + "px"; }; document.onmouseup = function() { if (document.all) {//ie 瑙i櫎绂佹閫夋嫨 document.body.onselectstart = new Function("return true"); } else {// chrome, ff document.body.className = ""; } document.onmousemove = document.onmouseup = null;//娓呴櫎move鍜寀p浜嬩欢 }; }, scrollBoxMousewheel:function(ev) {//榧犳爣婊氳疆婊氬姩 var direct = 0; var topCur = this.scrollBtn.offsetTop; var maxTop = this.scrollBar.clientHeight - this.scrollBtn.offsetHeight; //婊氳疆姣忔婊氬姩锛屾粴鍔ㄦ寜閽璧扮殑璺濈锛屾祴璇昪hrome婊?娆″樊涓嶅涓€灞 var directTop = this.scrollBox.clientHeight / 8 / this.scrollObj.scrollHeight * this.scrollBar.clientHeight; directTop = directTop>0 ? Math.ceil(directTop) : Math.floor(directTop); stopDefault(ev);//绂佹娴忚鍣ㄨ嚜韬殑婊氬姩鏉℃粴鍔ㄦ晥鏋 if (ev.wheelDelta) {//IE/Opera/Chrome direct = ev.wheelDelta; } else if (ev.detail) {//Firefox direct = ev.detail * (-1); } if(parseFloat(direct) > 0) { var topEnd = topCur - directTop; if (topEnd < 0) {topEnd = 0;} } else { var topEnd = topCur + directTop; topEnd = topEnd>maxTop ? maxTop : topEnd; } this.scrollBtn.style.top = topEnd + "px"; //this.scrollObj.style.top = -topEnd / this.scrollBar.clientHeight * this.scrollObj.scrollHeight + "px"; this.scrollObj.style.top = -topEnd / (this.scrollBar.clientHeight-this.scrollBtn.offsetHeight) * (this.scrollObj.scrollHeight-this.scrollBox.clientHeight) + "px"; }, init:function(scrollBox, scrollObj, scrollBar, scrollBtn) {//鍒濆鍖 this.scrollBox = typeof scrollBox == "string" ? document.getElementById(scrollBox) : scrollBox; this.scrollObj = typeof scrollObj == "string" ? document.getElementById(scrollObj) : scrollObj; this.scrollBar = typeof scrollBar == "string" ? document.getElementById(scrollBar) : scrollBar; this.scrollBtn = typeof scrollBtn == "string" ? document.getElementById(scrollBtn) : scrollBtn; var scale = this.scale();////琚粴鍔ㄥ璞′笌琚粴鍔ㄥ璞″妗嗙殑楂樺害姣斾緥 if (scale <= 1) {//鍒ゆ柇鏄惁杈惧埌浜х敓婊氬姩鏉$殑鏉′欢 // this.scrollObj.style.width = "100%"; this.scrollBar.style.display = "none"; return; } else { // this.scrollObj.style.width = "95%"; this.scrollBar.style.display = "block"; } // if(_this.scrollObj.scrollHeight+_this.scrollObj.offsetTop < _this.scrollBox.clientHeight) // {//鍒ゆ柇琚粴鍔ㄥ璞℃槸鍚︽粴杩囧ご浜 // _this.scrollObj.style.top = _this.scrollBox.clientHeight-_this.scrollObj.scrollHeight+"px"; // } //鍒濆鍖栨粴鍔ㄦ寜閽殑楂樺害鍜宼op鍊 //this.scrollBtn.style.height = 20 + "px"; //璁惧畾婊氬姩鎸夐挳鐨勯珮搴 //this.scrollBtn.style.top = -this.scrollObj.offsetTop/this.scrollObj.scrollHeight*this.scrollBar.clientHeight + "px"; var _this = this; this.scrollBtn.onmousedown = function(e) {//婊氬姩鎸夐挳鎷栨嫿浜嬩欢 var e = e || event; _this.scrollBtnMouseDown(e); }; //缁戝畾婊氳疆浜嬩欢 if (this.scrollBox.addEventListener) {//ff3.5浠ヤ笅 this.scrollBox.addEventListener("DOMMouseScroll", function(e) { var e = e || event; _this.scrollBoxMousewheel(e) }, false); } //W3C this.scrollBox.onmousewheel = function(e) { var e = e || event; _this.scrollBoxMousewheel(e) }; //IE/Opera/Chrome } }