还是根据我的个人习惯封装了一个方法 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. 【java读书笔记】——java开篇宏观把控 + HelloWorld

    学完java有一段时间了,一直没有做对应的总结,总认为有一种缺憾.从这篇博客開始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,基本的目的是扫盲.原来仅 ...

  2. 小猪的Android入门之路 Day 7 part 2

    小猪的Android入门之路 Day 7 part 2 Android的数据存储与訪问之--SharedPreferences(保存偏好參数) ---转载请注明出处:coder-pig 本节引言: 在 ...

  3. wcf系列5天速成——第二天 binding的使用(2)

    承接上一章,今天来讲MSMQ在实战项目中的应用.众所周知,放了防止订单丢失,我们都是采用Order过一下MSMQ. MSMQ的优点个人认为是:先天的异步消息发送和天生的自动负载均衡. 好了,看看MSM ...

  4. self

    self在对象方法中使用,指代调用当前对象方法的对象.可以利用self->属性名称的方法访问成员变量 self在类方法中使用,其指代的是当前类. 使用总结: self 谁调用当前方法,self就 ...

  5. SQL PROMPT5.3.4.1的一些设置选项

    SQL PROMPT5.3.4.1的一些设置选项 我使用的是5.3.4.1版本 sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章:例如SQLSERVER开发 ...

  6. provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接

    问题描述: SQL Sever2012 中:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...

  7. Winform mschart 动态绑定X时间表

    效果图: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  8. OC中两个关键字的作用:@property和@synthesize

    两个关键字的使用:@property和@synthesize 一.@property关键字这个关键字是OC中能够快速的定义一个属性的方式,而且他可以设置一些值,就可以达到一定的效果,比如引用计数的问题 ...

  9. Code First Entity Framework 6化被动为主动之explicit loading模式实战分析( 附源码)

    在使用Entity Framework加载关联实体时,可以有三种方式: 1.懒加载(lazy Loading); 2.贪婪加载(eager loading); 3.显示加载(explicit load ...

  10. InterviewProblems

    package com.xiaoysec; /** * 下面是面试趣医网技术面的时候出现的一个简单的题目 题目的要求是将一个数组中的奇数和偶数进行分离 以奇数在前一部分为例进行解题 * 算法的主要思想 ...