javascript滚动条之ScrollBar.js
ScrollBar.js是一个仅仅120行的滚动条JS插件,使用非常方便
详情阅读:https://git.oschina.net/wuquanyao/scrollbar.js
/*=================================* ScrollBar.js beta* Author:wuquanyao* Email:wqynqa@163.com*=================================*/var ScrollBar = {};(function(ScrollBar){var parent,root,track,bar,tx,ch,h,sh,rate;ScrollBar.adapter = function(config){init(config);}function init(config){parent = document.querySelector(config['selector']);root = parent.parentNode;createBar();mouseaction();}function createBar(){track = document.createElement('div');track.setAttribute('class','scroll-track');bar = document.createElement('div');bar.setAttribute('class','scroll-bar');track.appendChild(bar);root.appendChild(track);sh = root.scrollHeight;ch = root.offsetHeight;tx = root.offsetTop;h = ch/sh*ch;if(h<30){bar.style.height = '30px';h = 30;}else{bar.style.height = h+'px';}rate = (sh-ch)/(ch-h);}function mouseaction(){function eventparse(obj,type,func){if(document.attachEvent){var events = {click:'onclick',mouseover:'onmouseover',mousemove:'onmousemove',mouseout:'onmouseout',mousedown:'onmousedown',mouseup:'onmouseup',wheel:'DOMMouseScroll'};obj.attachEvent(events[type],func);}else{var events = {click:'click',mouseover:'mouseover',mousemove:'mousemove',mouseout:'mouseout',mousedown:'mousedown',mouseup:'mouseup',wheel:'DOMMouseScroll'};obj.addEventListener(events[type],func,false);}}function init(){var bool = false,v;eventparse(bar,'mousedown',function(event){bool = true;});eventparse(document,'mousemove',function(event){if(bool){if(event.clientY<=(tx+10)){v = 0;}else if(event.clientY>=(tx+ch-h)){v = tx+ch-h;}else{v = event.clientY;}parent.style.transform = 'translate(0px,'+(-v*rate)+'px)';bar.style.transform = 'translateY('+v+'px)';}});eventparse(document,'mouseup',function(event){bool = false;});// eventparse(track,'click',function(event){// event.stopPropagation();// bar.style.transition = 'all 0ms ease 0ms';// if(event.clientY<(tx+h)){// bar.style.transform = 'translate(0px,0px)';// }else if(event.clientY>=(tx+ch-h)){// bar.style.transform = 'translate(0px,'+(tx+ch-h)+'px)';// }else{// bar.style.transform = 'translate(0px,'+(event.clientY-h/2)+'px)';// }// parent.style.transform = 'translate(0px,'+((-event.clientY+tx)*rate)+'px)';// });var offset=0;if (window.navigator.userAgent.indexOf("Firefox") >= 0) {eventparse(parent,'wheel',wheelEvent);}else{parent.onmousewheel=parent.onmousewheel=wheelEvent;}function wheelEvent(e){var transform,bO,wv = (e.detail/3*20) || (-(e.wheelDelta/120*20));if((offset<(sh-ch) &&(offset>=0))){transform = 'translate(0px,'+(-offset)+'px)';bO = 'translateY('+(offset/rate)+'px)';offset = ((offset+wv)>(sh-ch))?offset:( ((offset+wv)<=0)?0:(offset+wv) );}bar.style.transform = bO;parent.style.transform = transform;}}init();}})(ScrollBar);
javascript滚动条之ScrollBar.js的更多相关文章
- 【JavaScript】使用纯JS实现多张图片的懒加载(附源码)
一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背 ...
- 初探JavaScript(三)——JS带我"碰壁"带我飞
已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...
- 初探JavaScript(二)——JS如何动态操控HTML
除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次 ...
- 强大的JavaScript动画图形库mo.js
最近在学习前端动画方面知识时发现了挺有趣的一个动画的图形库mo.js,页面效果真是酷炫,有兴趣的同学可以研究下:). 酷炫的效果: 以下是官方的demo效果,更多详情请查看 mo.js http:// ...
- 省市县 三级 四级联动Javascript JQ 插件PCASClass.js
想要使用这款组件,需要页面引入 PCASClass.js 核心文件,该文件在您的HTML文档<head>标签之内. <script type="text/javascrip ...
- 【转】《高级前端3.6》JavaScript多线程——Concurrent.Thread.js, WebWork
原文链接:http://www.cnblogs.com/woodk/articles/5199536.html JavaScript多线程,在HTML5 WebWork没出现之前很多人都是用Concu ...
- JavaScript模板引擎Template.js使用详解
这篇文章主要为大家详细介绍了JavaScript模板引擎Template.js使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 template.js 一款 JavaScript 模板引 ...
- 坑人的 Javascript 模块化编程 require.js
坑人的 Javascript 模块化编程 require.js
- 坑人的 Javascript 模块化编程 sea.js
坑人的 Javascript 模块化编程 sea.js 忧伤 加 蛋疼的 开始了 看文档 Sea.js 进行配置 seajs.config({ // 设置路径,方便跨目录调用 paths: { 'ar ...
随机推荐
- CodeForces 166E -Tetrahedron解题报告
这是本人写的第一次博客,学了半年的基础C语言,初学算法,若有错误还请指正. 题目链接:http://codeforces.com/contest/166/problem/E E. Tetrahedro ...
- 路由器 NorFlash与NandFlash区别
在淘宝上买修改openwrt的路由器,基本上都是改的16MB flash,那么为什么不改到1GB呢? 现在U盘的价格也很便宜啊. 于是我调查了一下,发现flash分为两种,NorFlash与NandF ...
- 20145208 《Java程序设计》第9周学习总结
20145208 <Java程序设计>第9周学习总结 教材学习内容总结 本周学习的内容有第十六周整合数据库,第十七章反射与类加载器,第十八章自定义泛型.枚举与注释. 在本周学习中,最大的难 ...
- Jenkins进阶系列之——15Maven获取Jenkins的Subversion的版本号
各位小伙伴们在工作中总是会碰到各种各样的奇葩需求,今天给大家说说Maven怎么在Jenkins中获取Subversion的版本号. Jenkins自己的环境变量中包含了很多有用的的参数,详情查看:ht ...
- 详解 ManualResetEvent
今天详细说一下ManualResetEvent 它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源 当一个线程开始一个活动(此活动必须完成后,其他线程 ...
- Cocos2d-x中使用OpenGL ES2.0编写shader
这几天在看子龙山人的关于OpenGL的文章,先依葫芦画瓢,能看到些东西,才能慢慢深入了解,当入门文章不错,但是其中遇到的一些问题,折腾了一些时间,为了方便和我一样的小白们,在这篇文章中进行写补充. O ...
- [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)
题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...
- jQuery基础之(五)jQuery自定义添加"$"与解决"$"的冲突
1.自定义添加$ 从上面四篇文章我们看到jQuery的强大,但无论如何,jQuery都不可能满足所有用户的需求,而且有一些需求十分小众,也不适合放到整个jQuery框架中,正是因为这一点,jQuery ...
- 第三章:javascript: 列表
在日常生活中,人们经常使用列表:待办事项列表,购物清单,十佳榜单,最后十名榜单等.计算机也在使用列表,尤其是列表中元素保存的是太多时.当不需要一个很长的序列中查找元素,或对其进行排序时,列表显得尤为有 ...
- 每天一个linux命令(43):lsof命令
lsof(list open files) 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以 如传输控制 ...