原生js实现滚动条
var SimulateScroll = (function(){
var oParent = document.getElementById('wrap-scroll-bar'),
oBox = document.getElementById('scroll-bar'),
oWp = document.getElementById('container'),
oDiv = document.getElementById('cont'),
bDown = true,
downFun = function(ev){
var oEv = ev || event;
var disY = oEv.clientY - oBox.offsetTop;
document.onmousemove = function(ev){
var oEv = ev || event;
var l = oEv.clientY - disY;
setTop(l);
};
document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
};
return false;
};
function mouseWheel(ev){
var oEv = ev || event;
bDown = oEv.wheelDelta ? oEv.wheelDelta < 0 : oEv.detail > 0;
if(bDown){
setTop(oBox.offsetTop + 10);
}else{
setTop(oBox.offsetTop - 10);
}
if(oEv.preventDefault){
oEv.preventDefault();
}
return false;
}
function setTop(l){
var h = oParent.offsetHeight - oBox.offsetHeight;
if(l < 0){
l = 0;
}else if(l > h){
l = h;
}
oBox.style.top = l + 'px';
var bl = l/h;
oDiv.style.top =- (oDiv.offsetHeight - oWp.offsetHeight) * bl + 'px';
}
function setBarHeight(){
var containerHeight = oWp.offsetHeight,
contentHeight = oDiv.offsetHeight;
oBox.style.height = (containerHeight * containerHeight /contentHeight) + 'px';
}
function addEvent(obj, sEv, fn){
if(obj.addEventListener){
obj.addEventListener(sEv,fn,false);
}else{
obj.attachEvent('on' + sEv,fn);
}
}
return {
oWp : oWp,
oDiv : oDiv,
scrollHidden : function(){
oBox.style.height = 0;
oBox.style.top = 0;
oDiv.style.top = 0;
oBox.onmousedown = null;
query.EventUtil.remove(oParent, 'mousewheel', mouseWheel);
query.EventUtil.remove(oParent, 'DOMMouseScroll', mouseWheel);
query.EventUtil.remove(oWp, 'mousewheel', mouseWheel);
query.EventUtil.remove(oWp, 'DOMMouseScroll', mouseWheel);
},
isScrollShow : function(){
if(oDiv.offsetHeight > oWp.offsetHeight){
SimulateScroll.inIt();
}else{
SimulateScroll.scrollHidden();
}
},
inIt : function(){
setBarHeight();
oBox.onmousedown = downFun;
query.EventUtil.add(oParent, 'mousewheel', mouseWheel);
query.EventUtil.add(oParent, 'DOMMouseScroll', mouseWheel);
query.EventUtil.add(oWp, 'mousewheel', mouseWheel);
query.EventUtil.add(oWp, 'DOMMouseScroll', mouseWheel);
}
}
})();
SimulateScroll.isScrollShow();
query.EventUtil.add(window,'resize',SimulateScroll.isScrollShow);
//query.EventUtil 为原生js事件库。如需使用以上滚动条方法,需加上事件库,或者改为jq写法
html结构:

原生js实现滚动条的更多相关文章
- JS 原生JS 判断滚动条滑动到底部(兼容苹果safari)
ListenerScoller () { var pageIndex = 1; var startX, startY; document.addEventListener('touchstart',f ...
- JS 原生JS 判断滚动条滑动到底部
window.addEventListener("scroll", function(event) { var scrollTop = document.documentEleme ...
- 原生js和jquey获取窗口宽高,滚动条,鼠标位置总结
JQuery获取浏览器窗口的可视区域高度和宽度,滚动条高度 alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(document).height( ...
- 原生JS 和 JQ 获取滚动条的高度,以及距离顶部的高度
JQ:相对比较简便 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 ...
- 原生js实现随着滚动条滚动,导航会自动切换的效果
最近学习前端,把前面用原生js写的一段有关tab切换效果的代码贴上,实现的效果比较简陋,请大家见谅 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- 原生JS实现瀑布流
浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...
- 瀑布流的三种实现方式(原生js+jquery+css3)
前言 项目需求要弄个瀑布流的页面,用的是waterfall这个插件,感觉还是可以的,项目赶就没自己的动手写.最近闲来没事,就自己写个.大致思路理清楚,还是挺好实现的... 原生javascript版 ...
- 基于原生js的返回顶部组件,兼容主流浏览器
基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...
- 用原生js实现ajax、jsonp
转载: http://www.cnblogs.com/yangheng/p/6065910.html 一.原生js实现ajax $.ajax({ url: '', type: 'post', data ...
随机推荐
- linux 安装mysql两种方式
yum -y install gcc gcc-c++ ncurses-devel cmake bison zlib zlib-devel libxml openssl dtrace ...
- algorithm -- 插入排序
插入排序是<算法导论>中第一个介绍的算法,详细分析了插入排序的原理,执行过程,证明了算法的正确性.同时也引出了算法分析和算法分析常用的方法. 此文对原文作个转述,检验学到的知识. 文中使用 ...
- Win8 传统桌面下无法上网的解决方法
Win8 很酷,就连出现的问题也都酷得不行~ 之前遇到的一些问题与解决方法,避免重新安装 1. Word 2013下, 输入法突然秀逗, 经常按了一个键后, 死循环输入该字符直到死机 解决方法: 进入 ...
- APP标配控制器:UINavigationController
导航控制器UINavigationController简介: 只要看到控制器界面上部有一个条就是导航控制器UINavigationController 导航控制器最上面有一个条是导航条高度44,Y值是 ...
- Redis概述
1. Redis是使用内存存储(in-momory)的非关系型数据. 2. Redis的数据存储选项共有5种:字符串.列表.集合.散列表.有序集合. 3. Redi ...
- C++中常见错误整理(不定期更新)
1.cannot have cv-qualifier 在C++中CV指const和volatile,非成员函数和静态成员函数不能有CV限定.
- php 循环删除目录中的过期文件
$savepath1 = 'Public/biaoqian/upload'; $path1 = dir($savepath1); while (($ ...
- Httpclient请求数据(post)
public static String loginCheck_POST_HttpClient(String name,String pass,String url){ String result = ...
- 项目组J2ee程序员的标志,你中招没 转载+评论
原文在此 校园级别的程序员的标志: 代码中最多的是嵌套if(null == xxx),还要告诉你,null必须写在前面,我靠. 防止把==写成=,c语言时代常犯的错误.由于null不能做左值,在写=的 ...
- 《java集合概述》
JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...