javascript封装自定义滚动条方法,可自定义四个边框滚动条
还是根据我的个人习惯封装了一个方法 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下载地址
javascript封装自定义滚动条方法,可自定义四个边框滚动条的更多相关文章
- 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法
不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...
- Javascript和jquery事件--滚动条事件和自定义滚动条事件样式
很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了.除了事件以外,对滚动条样式的调整也记在这里吧. 滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默 ...
- Jquery自定义扩展方法(二)--HTML日历控件
一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...
- Jquery自定义扩展方法(一)
jquery是一款流行的JS框架,自定义JS方法,封装到Jquery中,调用起来也挺方便的,怎么写Jquery扩展方法那,网上翻阅了一部分代码,其实也挺简单的: 方式一: (jQuery.fn.set ...
- jqery validate、validate自定义验证方法 + jaery form Demo
校验规则 required:true 必输字段 remote:"check.php" 使用ajax方法调用check.php验证输入值 email:true 必须输入正确格式 ...
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...
- Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)
一:简介: 在上一篇<Android实现圆形.圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)>博文中,采用BitmapShader方法实现自定义的圆形.圆角等自定 ...
- Spring Security验证流程剖析及自定义验证方法
Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...
- Unity中自定义扩展方法
问题背景 在使用unity开发过程中,通常会遇到一种情况,比如说给物体重新赋值坐标的问题, Transfrom tran: ,pos_y=,pos_z=; tran.position=new Vect ...
随机推荐
- Spring流程
Spring Web Flow是Spring框架的子项目,作用是让程序按规定流程运行. 1 安装配置Spring Web Flow 虽然Spring Web Flow是Spring框架的子项目,但它并 ...
- C语言中的回调函数
C语言中通过函数指针实现回调函数(Callback Function) ====== 首先使用typedef定义回调函数类型 ====== typedef void (*event_cb_t)(co ...
- Oracle基本代码学习
/*------------Orcale函数----------------*/ 1.字符函数 LOWER()小写UPPER()大写INITCAP()把第一个字母大写CONCAT()字符串的连接(也可 ...
- 查看EBS R12应用中使用CONTEXT_FILE的版本及路径
SELECT * FROM APPLSYS.FND_OAM_CONTEXT_FILES;
- OC中的一个特性:延展
OC中的一个特性:延展其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性.OC中为了弥补C语言中的这个问题,就 ...
- 原来你是个这样的JVM
第一节 本文将与其它文章不同,我们采用章节制来讲述每个知识点,但每个章节之间只有较低的耦合度,只要了解大概主线思路,一般都能看懂! OK啦,进入主题!虚拟机的发展史就不讲啦,和java之间的关系也不言 ...
- java.util.vector中的vector的详细用法
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创 ...
- css复合属性的写法
# 复合属性也称为 "shortcut" property (快捷属性),它作用是为了简化代码,提高页面运行的效率. # 下面的内容会介绍 2 个比较常用的复合属性 "f ...
- hdu 5652 India and China Origins 二分+bfs
题目链接 给一个图, 由01组成, 1不能走. 给q个操作, 每个操作将一个点变为1, 问至少多少个操作之后, 图的上方和下方不联通. 二分操作, 然后bfs判联通就好了. #include < ...
- stackoverflow收藏
Make a video using several .png images http://stackoverflow.com/q/13590976/5624248 Specifying and sa ...