手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >js 自制滚动条的小例子
js 自制滚动条的小例子
摘要:写了个js自制滚动条,首先,先看一下demo(点击这里)先有两个demo,右边那个黑色那个,是我一开始写的比较肤浅的代码:复制代码代码如下:...

写了个js自制滚动条,首先,先看一下demo(点击这里) 先

有两个demo,右边那个黑色那个,是我一开始写的比较肤浅的代码:

复制代码 代码如下:

var scrollself=(function(){

var scrollblock, //滚动块

scrollcontent, //被滚动的内容

scrollbar, //滚动条

scrollpanel, //滚动内容的滚动区域

cdistance, //滚动内容要滚动的距离

bdistance, //滚动块要滚动的距离

minuTop, //滚动条头尾剩下的空白

cTop, //滚动内容的top

startY=0, //滚动动作开始初鼠标的位置

bTop=0, //滚动动作开始初滚动块的top

isDrag=false; //是否拉动滚动块

function prevent(e){

if(e.preventDefault){

e.preventDefault();

}

if(e.stopPropagation){

e.stopPropagation();

}

e.cancelBubble=true;

e.returnValue=false;

}

function mouseDown(event){

isDrag=true;

event=event||window.event;

startY=event.clientY;

bTop=scrollblock.offsetTop;

cTop=scrollcontent.offsetTop;

// prevent(event);

}

function mouseMove(event){

if(isDrag){

event=event||window.event;

var newbTop=event.clientY-startY+bTop,

newcTop=cTop-(event.clientY-startY)/bdistance*cdistance;

if(newbTop<minuTop){

newbTop=minuTop;

newcTop=0;

}else{

if(newbTop>bdistance+minuTop){

newcTop=-cdistance;

newbTop=bdistance+minuTop;

}

}

scrollblock.style.top=newbTop+'px';

scrollcontent.style.top=newcTop+'px';

}else{

isDrag=false;

}

// prevent(event);

}

function mouseUp(event){

isDrag=false;

// prevent(event);

}

function addHandler(){

scrollblock.onmousedown=mouseDown;

scrollblock.onmousemove=mouseMove;

scrollblock.onmouseup=mouseUp;

document.onmouseup=mouseUp;

}

return{

init:function(scrollpanel_id,scrollcontent_id,scrollbar_id,scrollblock_id){

scrollblock=document.getElementById(scrollblock_id);

scrollcontent=document.getElementById(scrollcontent_id);

scrollbar=document.getElementById(scrollbar_id);

scrollpanel=document.getElementById(scrollpanel_id);

minuTop=scrollblock.offsetTop;

cdistance=scrollcontent.offsetHeight-scrollpanel.offsetHeight;

bdistance=scrollbar.offsetHeight-minuTop*2-scrollblock.offsetHeight;

enclose(scrollpanel,scrollcontent,scrollbar,scrollblock,bdistance,cdistance,minuTop);

addHandler();

}

}

}());

scrollself.init('scrollpanel2','scrollcontent2','scrollbar2','scrollblock2');

之所以说它肤浅,比较一下两个demo的滚动效果就知道了,右边的拉动滚动块时候,体验效果好差,很卡,而左边的就流畅多了。

因为很卡,我就又上网看了一下别人的代码,然后把根据别人的思路把代码改了一下,就有了左边那个绿色的那个demo,很明显,效果好了很多,代码:

复制代码 代码如下:

var scroll=(function(){

var scrollblock, //滚动块

scrollcontent, //被滚动的内容

scrollbar, //滚动条

scrollpanel, //滚动内容的滚动区域

cdistance, //滚动内容要滚动的距离

bdistance, //滚动块要滚动的距离

minuTop, //滚动条头尾剩下的空白

cTop, //滚动内容的top

startY=0, //滚动动作开始初鼠标的位置

bTop=0; //滚动动作开始初滚动块的top

function mouseDown(event){

event=event||window.event;

startY=event.clientY;

bTop=scrollblock.offsetTop;

cTop=scrollcontent.offsetTop;

if(scrollblock.setCapture){

scrollblock.onmousemove=doDrag;

scrollblock.onmouseup=stopDrag;

scrollblock.setCapture();

}else{

document.addEventListener("mousemove",doDrag,true);

document.addEventListener("mouseup",stopDrag,true);

}

}

function doDrag(event){

event=event||window.event;

var newbTop=event.clientY-startY+bTop,

newcTop=cTop-(event.clientY-startY)/bdistance*cdistance;

if(newbTop<minuTop){

newbTop=minuTop;

newcTop=0;

}else if(newbTop>bdistance+minuTop){

newcTop=-cdistance;

newbTop=bdistance+minuTop;

}

scrollblock.style.top=newbTop+'px';

scrollcontent.style.top=newcTop+'px';

}

function stopDrag(event){

if(scrollblock.releaseCapture){

scrollblock.onmousemove=doDrag;

scrollblock.onmouseup=stopDrag;

scrollblock.releaseCapture();

}else{

document.removeEventListener("mousemove",doDrag,true);

document.removeEventListener("mouseup",stopDrag,true);

}

scrollblock.onmousemove=null;

scrollblock.onmouseup=null;

}

return{

init:function(scrollpanel_id,scrollcontent_id,scrollbar_id,scrollblock_id){

scrollblock=document.getElementById(scrollblock_id);

scrollcontent=document.getElementById(scrollcontent_id);

scrollbar=document.getElementById(scrollbar_id);

scrollpanel=document.getElementById(scrollpanel_id);

minuTop=scrollblock.offsetTop;

cdistance=scrollcontent.offsetHeight-scrollpanel.offsetHeight;

bdistance=scrollbar.offsetHeight-minuTop*2-scrollblock.offsetHeight;

scrollblock.onmousedown=mouseDown;

enclose(scrollpanel,scrollcontent,scrollbar,scrollblock,bdistance,cdistance,minuTop);

}

}

}());

scroll.init('scrollpanel','scrollcontent','scrollbar','scrollblock');

比较了一下两个的代码,其实修改的不多,就有一点很大的不同,流畅的那一个(左边绿色那一个)多了这个东西——setCapture、releaseCapture。

具体是怎样的,再研究一下先。

【js 自制滚动条的小例子】相关文章:

kindeditor编辑器点中图片滚动条往上顶的bug

javascript委托(Delegate)blur和focus用法实例分析

动态提示的下拉框

CSS+JS构建的图片查看器

理解javascript定时器中的单线程

javascript原型模式用法实例详解

如何制作浮动广告

3张图片循环组和(很有动感)

javascript事件冒泡实例分析

javaScript中slice函数用法实例分析

精品推荐
分类导航