还是根据我的个人习惯封装了一个方法 setScroll({ box :父盒子DOM对象, content : 内容盒子DOM对象, scrollall : 滚动条大盒子DOM对象, scroll : 滚动条DOM对象, direction:   垂直滚动条还是水平滚动条  })  该方法传入一个object,前四个属性必选,最后一个可选,‘vertical’ || ‘’level"  ,默认vertical. html结构 最大盒子>(内容盒子+(滚动条盒子>滚动条)) 样式自己编写即可。 下来是js源码

0 var setScroll = function(obj){
1  
2 //初始化参数
3 var box = obj.box,
4         content = obj.content,
5         scrollall = obj.scrollall,
6         scroll = obj.scroll;
7         direction = obj.direction || 'vertical';
8  
9     //全局变量记录
10     var startPosition,
11      scrTop = 0,
12      currentTop = 0;
13  
14     //初始化配置参数
15     var getwh,wh,dier,tl,page;
16  
17      if(direction == 'vertical'){
18      getwh = 'offsetHeight';
19      wh = 'height';
20      dier = 'top';
21      tl = 'offsetTop';
22      page = 'pageY';
23      }else{
24      getwh = 'offsetWidth';
25      wh = 'width';
26      dier = 'left';
27      tl = 'offsetLeft';
28      page = 'pageX';    
29      }
30  
31     var boxHeight = box[getwh],
32      contentHeight = content[getwh];
33  
34  
35  
36     //初始化样式
37  
38     scroll.style[wh] = (boxHeight / contentHeight * boxHeight) + 'px';
39  
40  
41 var mousein = function (event){
42  
43 event = event || window.event;
44  
45 var scrTop = event[page] - box[tl] - startPosition;
46  
47 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); 
48  
49 scrTop = scrTop < 0 ? 0 : scrTop;
50 scrTop = scrTop > boxHeight - scroll[getwh] ? boxHeight - scroll[getwh] : scrTop;
51  
52 currentTop = -scrTop / boxHeight * contentHeight;
53  
54 scroll.style[dier] = scrTop + 'px';
55  
56 content.style[dier] = currentTop + 'px';
57  
58 }
59  
60  
61     //鼠标按下,开始拖动
62     scroll.addEventListener('mousedown',function(event){
63  
64      event = event || window.event;
65  
66      //记录当前鼠标点击位置距离父盒子顶部的距离
67      startPosition = event.offsetY;
68  
69 document.addEventListener('mousemove',mousein);
70  
71     })
72  
73  
74 document.addEventListener('mouseup',function(){
75  
76 document.removeEventListener('mousemove',mousein,false);
77  
78 })
79  
80 box.addEventListener('mousewheel',boxscroll);
81  
82 box.addEventListener('DOMMouseScroll',boxscroll,false); 
83  
84 function boxscroll(event){
85  
86 event = event || window.event;
87  
88 if(event.wheelDelta){
89  
90 if(-event.wheelDelta / 120 > 0){
91  
92 scrTop = scroll[tl] + -event.wheelDelta / 120 + 4;
93  
94 }else{
95  
96 scrTop = scroll[tl] + -event.wheelDelta / 120 - 4;
97  
98 }
99  
100 }else{
101  
102 if(event.detail / 3 > 0){
103  
104 scrTop = scroll[tl] + event.detail / 3 + 4;
105  
106 }else{
107  
108 scrTop = scroll[tl] + event.detail / 3 - 4;
109  
110 }
111  
112 }
113  
114 currentTop = -scrTop / boxHeight * contentHeight;
115  
116 scrTop = scrTop < 0 ? 0 : scrTop;
117 scrTop = scrTop > boxHeight - scroll[getwh] ? boxHeight - scroll[getwh] : scrTop;
118  
119 currentTop = currentTop > 0 ? 0 : currentTop;
120 currentTop = currentTop < -(contentHeight - boxHeight) ? -(contentHeight - boxHeight) : currentTop;
121  
122  
123 scroll.style[dier] = scrTop + 'px';
124  
125 content.style[dier] = currentTop + 'px';
126  event.preventDefault();
127 }};

在线运行地址可以查看源码分析 scrollJS下载地址

查看原文-摘自大公爵ddamy.com

javascript封装自定义滚动条方法,可自定义四个边框滚动条的更多相关文章

  1. 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法

    不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...

  2. Javascript和jquery事件--滚动条事件和自定义滚动条事件样式

    很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了.除了事件以外,对滚动条样式的调整也记在这里吧. 滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默 ...

  3. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  4. Jquery自定义扩展方法(一)

    jquery是一款流行的JS框架,自定义JS方法,封装到Jquery中,调用起来也挺方便的,怎么写Jquery扩展方法那,网上翻阅了一部分代码,其实也挺简单的: 方式一: (jQuery.fn.set ...

  5. jqery validate、validate自定义验证方法 + jaery form Demo

    校验规则 required:true  必输字段 remote:"check.php"  使用ajax方法调用check.php验证输入值 email:true  必须输入正确格式 ...

  6. OC中实例变量可见度、setter、getter方法和自定义初始化方法

    在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...

  7. Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)

    一:简介: 在上一篇<Android实现圆形.圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)>博文中,采用BitmapShader方法实现自定义的圆形.圆角等自定 ...

  8. Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...

  9. Unity中自定义扩展方法

    问题背景 在使用unity开发过程中,通常会遇到一种情况,比如说给物体重新赋值坐标的问题, Transfrom tran: ,pos_y=,pos_z=; tran.position=new Vect ...

随机推荐

  1. 迷宫寻宝(一)(bfs)

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...

  2. 面试题之——将文件夹下java文件写入到新的文件夹,并修改扩展名

    题目:将d:/code/java文件夹下的所有.java文件复制到d:/code/java/jad文件夹下并且将原来的文件的扩展名.java改为.jad 源代码: package com.zyh.in ...

  3. SVN—怎样安装SVNserver端软件

    一.怎样安装1.4.5版本号的SVNserver端软件:        a.下载1.4.5版本号的SVNserver端软件.下载地址:http://download.csdn.net/download ...

  4. iOS获取本地ip(基本通用)

    今天有个朋友问我怎样訪问手机ip,上网找了几个,用了近200多行代码,最后发现头文件用的居然还是Linux中的,OC没有这个头文件.感觉socket本身应该能够后去自己的ip就试了一下,果然7.8行代 ...

  5. 学习python 一些错误记录

    1. TypeError: 'unicode' object is not callable当遇到这样的错误时候, 一般是属性当做方法调用了,比如,selenium 脚本, driver.title ...

  6. Viewing the Raw SQL Statement(xcode で)

    Thanks to Core Data. Even without learning SQL and database, you’re able to perform create, select, ...

  7. 解决ie6里png图片透明变白色bug

    加入这段js就行了. function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6. { var a ...

  8. MySQL远程(IP)连接报错:Host 'IP地址' is not allowed to connect to this MySQL server

    ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server这是告诉你没有权限连接指定IP的主机,下面我们 ...

  9. 1001. 害死人不偿命的(3n+1)猜想

    /* * Main.c * 1001. 害死人不偿命的(3n+1)猜想 * Created on: 2014年8月27日 * Author: Boomkeeper *********测试通过***** ...

  10. 使用Ramdisk 加速 Visualstudio 编译调试

    一般来说ASP.NET在执行的时候,会先动态编译在目录 C:\Windows\Microsoft.NET\Framework64\版本\Temporary ASP.NET Files 由于每次修改程序 ...