div自定义的滚动条 (竖直导航条)

<style type="text/css">
        .scrollBar {
            width: 10px;
            background-color: #daa520;
            position: absolute;
            top: 1px;
            right: 1px;
            display: block;
            border-radius: 6px;
            z-index: 10;
        }

        .scrollBarHover {
            background-color: #b8860b;
        }

        .scrollBarActive {
            background-color: #ff8c00;
        }

        .scrollContent {
            width: 300px;
            height: 100px;
            border: 1px solid #808080;
            overflow: hidden;
        }
    </style>

HTML

<div id="text_div" class="scrollContent">
    22222222222222222<br/>
    ScrollBar<br/>
    ScrollBar<br/>
    ScrollBar<br/>

    ScrollBar<br/>
    ScrollBar<br/>
    ScrollBar<br/>
    ScrollBar<br/>
    ScrollBar<br/>
    ScrollBar<br/>
    1111111111111111111111<br/>

</div>

JavaScript

  1 <script type="text/javascript">
  2
  3
  4 function $(id) {
  5     return document.getElementById(id);
  6 }
  7
  8 var ScrollBar = function(options) {
  9     var defaults = {
 10         barClass:‘scrollBar‘,
 11         barHoverClass: ‘scrollBarHover‘,
 12         barActiveClass: ‘scrollBarActive‘,
 13         barContent: null
 14     },
 15             doc = document,
 16             utils = {
 17                 hide: function (obj) {
 18                     obj.style.display = ‘none‘;
 19                 },
 20                 show :function(obj) {
 21                     obj.style.display = ‘block‘;
 22                 },
 23                 isShow : function(c) {
 24                     return c.style["display"] === "none" ? !1 : !0
 25                 },
 26                 hasClassName: function(element, className) {
 27
 28                     var elementClassName = element.className;
 29                     return (elementClassName.length > 0 && (elementClassName == className ||
 30                             new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
 31                 },
 32                 addClassName: function(element, className) {
 33
 34                     if (!utils.hasClassName(element, className))
 35                         element.className += (element.className ? ‘ ‘ : ‘‘) + className;
 36                     return element;
 37                 },
 38
 39                 removeClassName: function(element, className) {
 40
 41                     element.className = element.className.replace(
 42                             new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ‘ ‘);
 43                     return element;
 44                 },
 45                 getCurrentStyle : function(el) {
 46                     if (el.currentStyle) {
 47                         return el.currentStyle;
 48                     } else if (window.getComputedStyle) {
 49                         return getComputedStyle(el, null);
 50                     }
 51                     return null;
 52                 },
 53                 extend :function() {
 54                     var args = Array.prototype.slice.call(arguments);
 55                     if (args.length == 1)
 56                         args.unshift({});
 57                     for (var name in args[1]) {
 58                         if (args[1].hasOwnProperty(name)) {
 59                             args[0][name] = args[1][name];
 60                         }
 61                     }
 62                     return args[0];
 63                 },
 64                 bind: function(target, type, call) {
 65                     if (target.addEventListener) {
 66                         target.addEventListener(type, call, 0);
 67                     } else if (target.attachEvent) {
 68                         target.attachEvent(‘on‘ + type, call);
 69                     } else {
 70                         target[‘on‘ + type] = call;
 71                     }
 72                 },
 73                 unbind: function(target, type) {
 74                     if (target.removeEventListener) {
 75                         target.removeEventListener(type);
 76                     } else if (target.detachEvent) {
 77                         target.detachEvent(‘on‘ + type);
 78                     } else {
 79                         target[‘on‘ + type] = null;
 80                     }
 81                 }
 82             };
 83
 84     options = utils.extend(defaults, options || {});
 85
 86     utils.extend(this, {
 87         utils : utils,
 88         bar : doc.createElement(‘div‘),
 89         content : options.barContent,
 90         init: function() {
 91             this.bar.className = options.barClass || ‘scrollBar‘;
 92             this.content = options.barContent;
 93
 94             this.content.appendChild(this.bar);
 95
 96             var el = doc.createElement(‘div‘),style = utils.getCurrentStyle(this.content);
 97
 98             el.style.cssText = ‘overflow: hidden; position: relative;padding:2px; width:‘ + style.width + ‘; height: ‘ + style.height + ‘;‘;
 99             var contentParent = this.content.parentNode;
100
101             el.appendChild(this.content);
102             el.appendChild(this.bar);
103             contentParent.appendChild(el);
104
105             this.wheelThread = 20;
106             this.isScrolling = !1;
107             this.setBarHeight();
108             var self = this;
109             var events = {
110                 onMouseDown: function(e) {
111                     e = e || window.event;
112                     var target = e.currentTarget || e.srcElement;
113                     target.style.cursor = ‘default‘;
114                     self.bar.y = e.clientY;
115                     self.bar.t = parseInt(self.bar.style.marginTop);
116                     self.isScrolling = 1;
117
118                     options.barActiveClass && utils.addClassName(self.bar, options.barActiveClass);
119                 },
120                 onMouseMove: function(e) {
121                     e = e || window.event;
122                     var isClickButton = (e.button === 1 || e.button === 0);
123                     if (self.isScrolling && isClickButton) {
124                         window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
125                         self.scroll(e.clientY - self.bar.y);
126                         e.preventDefault && e.preventDefault();
127                         e.stopPropagation && e.stopPropagation();
128                     }
129                 },
130                 onMouseUp: function() {
131
132                     if (self.isScrolling) {
133                         self.isScrolling = 0;
134
135                         options.barActiveClass && utils.removeClassName(self.bar, options.barActiveClass);
136                     }
137                 },
138                 onMouseOver: function() {
139
140                     options.barHoverClass && utils.addClassName(self.bar, options.barHoverClass)
141                 },
142                 onMouseOut: function() {
143                     utils.removeClassName(self.bar, options.barHoverClass)
144                 },
145                 onMouseWheel: function(e) {
146                     e = e || window.event;
147                     if (utils.isShow(self.bar)) {
148                         self.D = e.wheelDelta;
149                         e.returnValue = !1;
150                         var d = self.D < 0 ? self.wheelThread : 0 - self.wheelThread;
151                         self.bar.y = e.clientY;
152                         self.bar.t = parseInt(self.bar.style.marginTop);
153                         self.scroll(d)
154                     } else
155                         self.scrollToBottom(e)
156                 },
157                 onClick: function(e) {
158                     e.stopPropagation && e.stopPropagation()
159                 },
160                 onDomMouseScroll: function(e) {
161                     if (utils.isShow(self.bar)) {
162                         self.D = e.detail > 0 ? -1 : 1;
163                         e.stopPropagation && e.stopPropagation();
164                         e.preventDefault && e.preventDefault();
165                         self.bar.y = e.clientY;
166                         self.bar.t = parseInt(self.bar.style.marginTop);
167                         self.scroll(self.D < 0 ? self.wheelThread : 0 - self.wheelThread);
168
169                     } else {
170                         self.scrollToBottom(e)
171                     }
172                 }
173             }
174
175             utils.bind(this.bar, ‘mousedown‘, events.onMouseDown);
176             utils.bind(doc, ‘mousemove‘, events.onMouseMove);
177             utils.bind(this.bar, ‘mouseout‘, events.onMouseOut);
178             utils.bind(this.bar, ‘mouseover‘, events.onMouseOver);
179             utils.bind(doc, ‘mouseup‘, events.onMouseUp);
180             utils.bind(this.content, ‘mousewheel‘, events.onMouseWheel);
181             utils.bind(this.content, ‘dommousescroll‘, events.onDomMouseScroll);
182
183         },
184         onscroll : doc.onscroll || function() {
185         },
186         scrollToBottom : doc.scrollToBottom || function() {
187         },
188         scroll: function(b) {
189
190             this.marginTop = (this.bar.t || 0) + b;
191             if (this.marginTop < 0)
192                 this.marginTop = 0;
193             if (this.marginTop > this.content.clientHeight - this.bar.offsetHeight)
194                 this.marginTop = this.content.clientHeight - this.bar.offsetHeight,this.scrollToBottom();
195             this.bar.style.marginTop = this.marginTop + "px";
196             if (b == 0)
197                 this.onscroll(b, b);
198             var a = (this.content.scrollHeight -
199                     this.content.offsetHeight) * parseInt(this.marginTop) / (this.content.offsetHeight - this.bar.offsetHeight);
200
201             this.content.scrollTop = a;
202
203             this.onscroll(a, b)
204         },
205         setBarHeight: function() {
206             this.onscroll(0, 0);
207             this.bar.style.height = "0";
208             this.utils.hide(this.bar);
209
210             this.content.offsetHeight - this.content.scrollHeight >= 0 ? (this.bar.t = 0) : (this.bar.style.height = parseInt(this.content.offsetHeight /
211                     this.content.scrollHeight * this.content.offsetHeight) + "px",this.utils.show(this.bar),this.bar.t = parseInt(this.bar.style.marginTop));
212             this.scroll(0);
213         }
214     });
215
216
217 }
218
219 var scroll = new ScrollBar({
220     barContent: $(‘text_div‘)
221 });
222 scroll.init();
223
224 </script>

时间: 2024-10-10 19:49:05

div自定义的滚动条 (竖直导航条)的相关文章

div自定义的滚动条 (水平导航条)

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 <style> 6 div{ 7 /* width:800px;*/ 8 height:200px; 9 border:1px solid #ddd; 10 overflow: hidden; 11 /*white-space:nowrap; */ 12 } 13 /*div::-webkit-scrollbar-track

【转】一个DIV+CSS代码布局的简单导航条

原文地址:http://www.divcss5.com/shili/s731.shtml 简单的DIV CSS代码布局实现导航条 一个蓝色主题的导航条布局案例,本CSS小实例,采用DIV CSS实现.同时不用图片做背景,直接使用背景色实现,鼠标经过悬停对应栏目名称是对应背景蓝色变深. 导航条部分效果截图 一般导航条采用ul li列表布局,这里也不例外DIVCSS5实例也采用列表标签ul li+ CSS布局. 一.布局思维思考   -   TOP 在实际DIV+CSS布局项目中,一般不会只使用一次

android中自定义view---实现竖直方向的文字功能,文字方向朝上,同时提供接口,判断当前touch的是哪个字符,并改变颜色

android自定义view,实现竖直方向的文字功能,文字方向朝上,同时提供接口,判断当前touch的是哪个字符,并改变颜色. 由于时间比较仓促,因此没有对代码进行过多的优化,功能远远不如android的自带的TextView强大,只是继承于view,而不是textview. 主要用途:电话本的侧边快速导航等 效果图:(自定义字符串 “#ABCDEFGHIJKLMN),可以实现自定义任意字符串 view的实现: 1 import cn.carbs.verticalstraighttextview

水平和竖直滑动条捆绑,表头固定的实现

首先,在很多的网页数据分析或者网站查询数据库的操作中,我们不可避免需要在前端页面中展示所有数据.由于版面构建的问题,导致div内容模块大小,不足以容纳所有数据,这时候我们就必须考虑引入页面的水平或者竖直滚动条.这样能够实现在固定大小的div中,通过滑动滚动条来对所有数据进行检索.这时,我们会发现,如果表头不被固定,我们滑动滚动条时,不能很好的确定当前数据属于什么列是什么样的数据. 所以,在这里我分享一下通过js固定表头的页面操作: 1 //水平.垂直滚动条实现表头标题的固定 2 document

Android 自定义View实现竖直跑马灯效果

首先给出效果图 中间的色块是因为视频转成GIF造成的失真,自动忽略哈. 大家知道,横向的跑马灯android自带的TextView就可以实现,详情请百度[Android跑马灯效果].但是竖直的跑马灯效果原生Android是不支持的.网上也有很多网友实现了自定义的效果,但是我一贯是不喜欢看别人的代码,所以这篇博客的思路完全是我自己的想法哈. 首先,我们需要给自定义的控件梳理一下格局,如下图所示: 1.首先我们将控件分为三个区块,上面绿色部分为消失不可见的块,中间黑色部分为可见区域,下面红色部分为欲

DIV+CSS实现仿京东商城导航条效果

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <meta http-equiv=&quo

C# 时间控件 竖直进度条 饼图显示 按钮基础控件库

Prepare 本文将使用一个NuGet公开的组件来实现一些特殊的控件显示,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装: Install-Package HslCommunication NuGet安装教程  http://www.cnblogs.com/dathlin/p/7705014.html 技术支持QQ群:592132877 (组件的版本更新细节也将第一时间在群里发布) Summary

Bootstrap导航条

前面的话 导航条(navbar)和导航(nav),就相差一个字,多了一个“条”字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航),也可以是表单,还有就是表单和导航一起结合等多种形式.本文将详细介绍Bootstrap导航条 基础导航条 在Bootstrap框架中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条是在应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开

Bootstrap(标准顶部导航条)

<!DOCTYPE html><html lang="en"><head> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <tit