js原生封装自定义滚动条

  1 /*
  2  * @Author: dothin前端
  3  * @Date:   2015-11-21 00:12:15
  4  * @Last Modified by:   dothin前端
  5  * @Last Modified time: 2015-11-21 00:29:12
  6  */
  7 ! function() {
  8     var EventUtil = {
  9         addHandler: function(obj, type, handler) {
 10             if (obj.addEventListener) {
 11                 obj.addEventListener(type, handler, false);
 12             } else if (obj.attachEvent) {
 13                 obj.attachEvent("on" + type, handler);
 14             } else {
 15                 obj["on" + type] = handler;
 16             }
 17         },
 18         removeHandler: function(obj, type, handler) {
 19             if (obj.removeEventListener) {
 20                 obj.removeEventListener(type, handler, false);
 21             } else if (obj.detachEvent) {
 22                 obj.detachEvent("on" + type, handler);
 23             } else {
 24                 obj["on" + type] = null;
 25             }
 26         },
 27         getEvent: function(event) {
 28             return event ? event : window.event;
 29         },
 30         getTarget: function(event) {
 31             return event.target || event.srcElement;
 32         },
 33         preventDefault: function(event) {
 34             if (event.preventDefault) {
 35                 event.preventDefault();
 36             } else {
 37                 event.returnValue = false;
 38             }
 39         },
 40         stopPropagation: function(event) {
 41             if (event.stopPropagation) {
 42                 event.stopPropagation();
 43             } else {
 44                 event.cancelBubble = true;
 45             }
 46         },
 47         getWheelDelta: function(event) {
 48             if (event.wheelDelta) {
 49                 return event.wheelDelta;
 50             } else {
 51                 return -event.detail * 40;
 52             }
 53         }
 54     };
 55     //tip:滚动条上面的长度可变的按钮
 56     //scrollBar:滚动条
 57     //section:内容父级
 58     //article:内容
 59     function ScrollBar(tip, scrollBar, section, article) {
 60         this.oTip = document.getElementById(tip);
 61         this.oScrollBar = document.getElementById(scrollBar);
 62         this.oSection = document.getElementById(section);
 63         this.oArticle = document.getElementById(article);
 64         var _this = this;
 65         this.init();
 66         this.oTip.onmousedown = function(ev) {
 67             _this.Down(ev);
 68             return false;
 69         };
 70         //给需要加滚动事件是元素加滚动事件
 71         EventUtil.addHandler(this.oSection, ‘mousewheel‘, function(ev) {
 72             _this.onMouseWheel(ev);
 73         }); //ie,chrome
 74         EventUtil.addHandler(this.oSection, ‘DOMMouseScroll‘, function(ev) {
 75             _this.onMouseWheel(ev);
 76         }); //ff
 77         EventUtil.addHandler(this.oScrollBar, ‘mousewheel‘, function(ev) {
 78             _this.onMouseWheel(ev);
 79         }); //ie,chrome
 80         EventUtil.addHandler(this.oScrollBar, ‘DOMMouseScroll‘, function(ev) {
 81             _this.onMouseWheel(ev);
 82         }); //ff
 83     };
 84     //初始化滚动条,内容不够时隐藏滚动条,滚动条按钮长度由内容长度决定
 85     ScrollBar.prototype.init = function() {
 86         if (this.oSection.offsetHeight >= this.oArticle.offsetHeight) {
 87             this.oScrollBar.style.display = ‘none‘;
 88         } else {
 89             this.oTip.style.height = 100 * this.oScrollBar.offsetHeight / (this.oArticle.offsetHeight - this.oSection.offsetHeight) + ‘px‘;
 90             document.title = this.oTip.style.height;
 91         }
 92         //个浏览器行高,字体大小,字体类型,不一致,要想初始化滚动条一致,先统一样式
 93     };
 94     ScrollBar.prototype.Down = function(ev) {
 95         var oEvent = EventUtil.getEvent(ev);
 96         var _this = this;
 97         this.maxH = this.oScrollBar.offsetHeight - this.oTip.offsetHeight;
 98         this.disY = oEvent.clientY - this.oTip.offsetTop;
 99         document.onmousemove = function(ev) {
100             _this.fnMove(ev);
101             return false;
102         }
103         document.onmouseup = function(ev) {
104             _this.Up(ev);
105         }
106     };
107     ScrollBar.prototype.fnMove = function(ev) {
108         var oEvent = EventUtil.getEvent(ev);
109         var t = oEvent.clientY - this.disY;
110         this.Move(t);
111     };
112     ScrollBar.prototype.onMouseWheel = function(ev) {
113         var oEvent = EventUtil.getEvent(ev);
114         this.maxH = this.oScrollBar.offsetHeight - this.oTip.offsetHeight;
115         this.disY = oEvent.clientY - this.oTip.offsetTop;
116         if (EventUtil.getWheelDelta(oEvent) > 0) {
117             var t = this.oTip.offsetTop - 10;
118             this.Move(t);
119         } else {
120             var t = this.oTip.offsetTop + 10;
121             this.Move(t);
122         }
123         EventUtil.preventDefault(oEvent);
124     };
125     ScrollBar.prototype.Move = function(t) {
126         if (t < 0) {
127             t = 0;
128         } else if (t > this.maxH) {
129             t = this.maxH;
130         }
131         this.oTip.style.top = t + ‘px‘;
132         this.contentH = this.oArticle.offsetHeight - this.oSection.offsetHeight;
133         this.oArticle.style.top = -this.contentH * this.oTip.offsetTop / this.maxH + ‘px‘;
134     };
135     ScrollBar.prototype.Up = function(ev) {
136         document.onmousemove = document.onmouseup = null;
137     };
138     window.ScrollBar = ScrollBar;
139 }();

调用实例:

 1 <!DOCTYPE html>
 2 <html lang="en" id="html">
 3 <head>
 4     <meta charset="UTF-8" />
 5     <title>title here</title>
 6     <script src="scrollBar.js"></script>
 7     <style>
 8         #section{position:absolute;top:200px; left:50px;width:300px; height:298px; border:1px solid #999; overflow: hidden; }
 9         #article{position:absolute;padding:20px; text-indent: 30px;font-size: 14px; line-height: 25px; font-family: ‘微软雅黑‘;}
10         #scrollBar{ position:absolute;top:0; right:0;height:300px; width:20px; background:#ddd;}
11         #tip{position:absolute;top:0;left:0; background:#999; width:20px; min-height:20px; cursor:pointer;}
12     </style>
13 </head>
14 <body id="body" style="height:2000px;">
15     <div id="section">
16         <div id="article">
17             一滴血而已,居然带动天地大势,滚滚而涌,让大漠沸腾,沙浪拍天,所有人都在颤栗!
18
19     异域百世
20    一滴血,居然造成这种要灭世般的景象,怎能令人不畏?
21
22    “不朽之王!”
23
24    这一刻,异域百万大军顶礼膜拜后,全都高呼,他们激动,神色疯狂,带着敬仰。还有无比的崇敬,仰望血海。
25
26    五色血液浩荡,真的如汪洋席卷而来,淹没这里。
27    的杀气,滔天而上,滚滚沸腾。
28
29     大旗横空,如银河翻卷。猎猎作响,绽放出刺目的光,上面有血迹,虽然过去了一个纪元,还未彻底干涸。
30
31     因为,那是属于仙王的血,此时像是要滴落了下来,从旗面内不断渗出!
32     万大军全都跪伏了下去,进行膜拜!
33
34     刹那,域外诸多星斗都在摇动,整片大宇宙都要震荡起来,那种威势不可想象,撼天动地,岁月长河跟着浮现。
35
36     一滴血而已,就造成了这般无法理解的恐怖景象!
37
38     所有人都知道,那是异域的无上强者演绎的,真身过不来,洒出一滴血,跨过天渊,飞临这片战场中。
39
40  一滴血,晶莹欲滴,绽放五色不朽之光,滚滚而来,看着很小一滴,但是气势磅礴,压的乾坤轰鸣,要崩溃了。
41
42    帝关,城墙上。
43
44    许多人胆寒,哪怕有巨城可守,难以攻破,众人也惶恐,神魂都在不由自主的颤栗。
45
46    “我就知道,孟天正惹大祸了,我都已经谈好条件,他还出城,今日若有大难,他将是千古罪人!”金太君说道。
47
48    至于各族修士,包括金系人马、杜家等都早已说不出话来,那种恐怖波动,让他们一个脸色苍白。
49
50    许多人都觉得,不朽之王是不可战胜的,万一他们真的动身过来,城破了怎么办?
51
52    “应该……不会跨界吧?”一些人颤声道,这是杜家的大统领。
53
54    “跨界与否,一直是五五之数,就看他们的心意了!”金太君手拄着木杖说道。
55
56    帝关前,出城作战的帝关修士自然也都面色发白了,虽然说他们很勇猛,无所畏惧,但是那种压迫让他们身体难受。
57
58    轰!
59
60    几件仙器发光,隔绝外界,绽放出一缕又一缕白雾,那是仙气在弥漫,守护了他们。
61
62    然而,那滴血也发生了奇异的变化。迅速放大,如同汪洋一般,席卷了天上地下,迅速而来。铺天盖地。
63
64    仿佛世界末日来临,震撼人间,所有人都惶恐,难以抗拒。
65
66    域外,一颗又一颗星体都在跟着颤栗。在抖动,间要解体,要在这一刻崩开。
67
68
69    “铁血战旗,不复苏更待何时!”孟天正站在那里,一招手,将那面破烂的战旗取到手中,一声大吼,而后猛力将它掷出。
70
71     破烂的战旗,饱经岁月洗礼。带着万古的沉重与沧桑,哗的一声卷动,朝前方飞去,而后不断放大。
72
73     到了最后。它抖动起来,原本暗淡的旗面,发出盖
74         </div>
75         <div id="scrollBar">
76             <div id="tip"></div>
77         </div>
78     </div>
79     <script>
80         new ScrollBar(‘tip‘,‘scrollBar‘,‘section‘,‘article‘);
81     </script>
82 </body>
83 </html>
时间: 2024-12-20 01:14:34

js原生封装自定义滚动条的相关文章

js原生封装getClassName()方法-ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素

<html> <head> <script type="text/javascript"> window.onload = function() { var topMenus = getClass('li','topMenu'); for(var i=0;i < topMenus.length; i++) { alert(topMenus[i].innerHTML); } } function getClass(tagName,classNam

JavaScript自定义滚动条

原生JavaScript自定义滚动条 版权所有,如若转载请注明出处并附上本文链接 http://www.cnblogs.com/Pengxm-liveShare/p/5953810.html 由于项目需求需要用到滚动条, 但是浏览器自带的太丑, 而且每个浏览器显示的都不同, 所以自己编写了一个自定义的滚动条. (由于是菜鸟, 写的比较乱, 大家仅供参考就好, 能提提意见改进下就更好了!) 话不多说先看下样式: 主要功能: 支持滚动条自定义样式(颜色, 大小) 支持鼠标事件(点击和滑轮滚动) 主要

手动封装js原生XMLHttprequest异步请求

Code Object.extend =function(targetObj,fnJson){ //扩展方法,类似于jQuery的$.extend,可以扩展类的方法,也可以合并对象 for(var fnName in fnJson){ targetObj[fnName]=fnJson[fnName]; } return targetObj; }; HttpAjax = (function(){ function HttpAjax(options){ var settings={ type:'po

LM-diyScroll.js PC自定义滚动条组件

LM-diyScroll.js PC自定义滚动条组件,零依赖! github地址:http://dtdxrk.github.io/LM-diyScroll/ CDN http://dtdxrk.github.io/LM-diyScroll/LM-diyScroll-min.js Demo 实例演示 USE 生成一个有滚动条的实例 var box = new LM_diyScroll({ id:'box', viewHeight:300 }); 显示滚动条 box.barShow(); 隐藏滚动条

封装自定义验证方法-validate-methods.js

$(function(){ // 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", function(value, element) { value=parseInt(value); return this.optional(element) || value==0; }, "整数必须为0"); // 判断整数value是否大于0 jQuery.validator.addMethod("isI

js 自定义滚动条

<!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Language" content="zh-cn" /> <title>自定义滚动条</title> <meta name="keywords

H5自定义滚动插件——DeftScroll.js,可自定义滚动条

在一些项目中,用户总是要求自定义一下滚动条,以前一般用iscroll解决,但是发现iscroll有很多不方便的地方,而且也比较大,索性自己琢磨一个类似的插件吧!目的有两个:要足够小,易于上手使用:功能一定要足够实用,能满足广大H5开发者的基本需求. 介绍一下这个插件的主要功能: 1.隐藏或显示滚动条,自定义滚动条样式. 2.滚动dom的刷新:refresh: 3.滚动内容的懒加载: 4.子元素绑定tap事件: 5.支持scrolling.scrollEnd等插件内事件绑定: 6.scrollTo

利用CSS3新特性实现完全兼容的自定义滚动条。

背景:最近项目里面因为统一页面风格,用到了自定义滚动条,在完成之前的那个滚动条的时候,与网上各个滚动条插件实现的方法类似,相当于造了轮子,通过css3的 网上看到的滚动条插件多数是通过监听内容的滚动事件,由于原生js的滚动事件存在一些bug,所以实际上用jQuery的mousewheel.js插件的比较多,自己做的滚动条也是引用了该插件. 首先说一说自定义滚动条实现的普遍步骤和方法: 背景: A需要滚动. 1.给A添加一个父级S包裹,并将B进行绝对或相对定位(这点根据S的定位,目的是为了保持原有

Js原生Ajax和Jquery的Ajax

一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死 2.Ajax的运行原理 页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到服务器端,在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后,会触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面1 功能. 二