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 ... 
随机推荐
- 在magento中使用正则式
			$sqlCondition = "IFNULL(_table_name.value, _table_name_default.value) REGEXP '^[^a-zA-Z]'" ... 
- [Regionals 2012 :: Asia - Tokyo ]
			链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=56 ... 
- THP Transparent HugePages  相关知识与关闭
			近期遇到个LINUX系统内存比較大.未开 HugePages,业务有变化导致ORACLE连接数剧增至上千个,PageTables达到上百G.导致内存不足系统HANG住的案例. 因此须要开启 HugeP ... 
- UVA - 10098 - Generating Fast   (枚举排列)
			思路:生成全排列,用next_permutation.注意生成之前先对那个字符数组排序. AC代码: #include <cstdio> #include <cstring> ... 
- 密码算法详解——Simon
			0 Simon简介 详细文档请直接阅读参考文献[1]. Simon是由NSA设计的轻量级分组密码算法(LIGHTWEIGHT BLOCK CIPHER).主要应用于硬件或软件条件受限(例如:芯片面积要 ... 
- 基于jQuery实现的水平和垂直居中的div窗口
			在建立网页布局的时候,我们经常会面临一个问题,就是让一个div实现水平和垂直居中,虽然好几种方式实现,但是今天介绍时我最喜欢的方法,通过css和jQuery实现. 1.通过css实现水平居中: 复 ... 
- iOS-Core Text 入门
			NSTextView和Attribued String 第一次接触苹果系的富文本编程是在写Mac平台上的一个输入框的时候,输入框中的文字可以设置各种样式,并可以在文字中间插入图片,好在Mac的AppK ... 
- Eclipse 完全 设置UTF-8 环境
			当开始一个新的Java项目时,最好将整个环境设置为UTF-8 一般通过如下几步来设置: 1: 设置工作空间的编码格式:Window -> Preferences -> General -& ... 
- js返回值
			看下js变量.作用域.内存文档. 1. <script type="text/javascript"> function c(){ return 23; } var a ... 
- rownum的使用-分页
			rownum的使用-分页 oracle分页显示方法 一.使用rownum分页显示方式 方式1:SELECT * FROM (SELECT ROWNUM r, a.* FROM b$i_exch_in ... 
