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 ...
随机推荐
- 讽刺的是,我在linux下使用最多的命令,竟然是windows的
$ history | awk '{print $2}' | sort | uniq -c | sort -nr | head dir vi echo cd vim jobs gcc ls less ...
- Opencv step by step - 视频进度条
上一个博文只是进行了视频播放,这里加上进度条. 下面是修改好的代码: #include <cv.h> #include <highgui.h> /* * tan@ubuntu: ...
- mod mono xsp
Mod_Mono 是Apache的一个扩展模块,使得apache支持asp.net. 该模块传递asp.net的请求到一个额外的程序 mod-mono-server(该程序是在安装xsp的时候自动安装 ...
- 微信第一个“小程序”亮相:不是APP胜似APP!
前天晚上,微信终于推出了“小程序”功能.看过效果演示之后,网友表示,好多App可以卸载了! 据了解,微信“小程序”已首批开放给200名拥有微信服务号的开发者进行内测,而且目前开发者发布的小程序无法在用 ...
- IDL简介与corba入门案例
IDL接口定义语言简介 IDL用中立语言的方式进行描述,能使软件组建(不同语言编写的)间相互通信. IDL提供了一个桥来连接不同的系统. Corba 上的服务用IDL描述,将被映射为某种程序设计语 ...
- js事件代理
需要注意的blog:http://blog.csdn.net/majian_1987/article/details/8591385 一篇博客看懂 http://blog.csdn.net/maji ...
- SpringMVC使用中遇到的问题总结
使用的IDE工具是MyEclipse2014, spring版本为3.1.1 在使用Spring MVC时需要修改web.xml配置文件,web.xml默认放在WEB-INF目录下. 1.web.xm ...
- jQuery使用之(五)处理页面的事件
在之前dom操作中提到了javascript对事件处理的介绍.由于不同浏览器处理事件各不相相同,这给开发者带来了不必要的麻烦,jQuery的方便的解决了这个方面的麻烦. 1.绑定事件监听 (http: ...
- iOS边练边学--iOS中的(ARC下)单粒模式(GCD实现)
一.ARC中实现单粒模式 在.m 保留一个全局的static的实例 static id _名称; 重写allocWithZone:方法,在这里创建唯一的实例 提供一个类方法让外界访问唯一的实例 实现c ...
- ASP.NET--GridView配合DetailsView初使用
1.GridView与DetailsView中的绑定模板不可以进行编辑的问题 方法:将要编辑的列转换为模板列---TemplateField <EditItemTemplate></ ...