原生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 ...
随机推荐
- java中this 关键字的使用
在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.而且,更为重要的是this和super都无法 ...
- 揭秘JavaScript中谜一样的this
揭秘JavaScript中谜一样的this 在这篇文章里我想阐明JavaScript中的this,希望对你理解this的工作机制有一些帮助.作为JavaScript程序员学习this对于你的发展有 ...
- Java集合类学习笔记(Queue集合)
Queue集合用于模拟队列(先进先出:FIFO)这种数据类型. Queue有一个Deque接口,代表一个"双端队列",双端队列可以同时从两端来添加.删除元素,因此Deque的实现类 ...
- 面试复习(C++)之希尔排序
#include<iostream> using namespace std; void Shellsort(int *a,int len) { int gap; ;gap>;gap ...
- 专家解读:BPM与OA的区别
演进历程 传统OA 模块化架构,仅能满足管理执行的刚性效率,系统的专业化程度有限. BPM 平台化架构,管理要求精细化程度高,系统更专业化,更注重整合. BPM SAAS 基于云架构,跨组织社交化,系 ...
- NodeJs使用asyncAwait两法
async/await使用同步的方式来书写异步代码,将异步调用的难度降低到接近于0,未来必将大放异彩.然而在当下,由于标准化的缓存步伐,async/await尚在ES7的草案中.为了尝先,特试用了下面 ...
- Cheap Hollister Clothing
(link to hollisterco site), Spectacles don't simply take care of the eye area inside sun; Putting th ...
- 思维导图MindManager的文件格式与例图
思维导图软件很多,能够画出思维导图的软件更多.作为流传较广而又比较成熟的思维导图软件,MindManager有专门的文件格式.如果读者想多借鉴导图,就应该了解MindManager的文件格式. Min ...
- SQL表旋转
在制作报表的时候,有时候会碰到基础资料是依照时间区间去一笔一笔记录的资料,但是使用者在看报表的时候想要将时间区间以横向的方式呈现不是直向的情况出现,又或者基础资料的表数据结构是横向的而使用者在看报表的 ...
- 依然同上~ 点击获取当前option的value与text
$(".tjbtn").click(function(){ $('#leader').each(function(index, ele){ var leader = ele.val ...