您的位置:首页 > Web前端 > JavaScript

JavaScript 无缝上下滚动加定高停顿效果

2008-04-26 15:54 676 查看

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />


<title></title>


</head>


<body>


<script type="text/javascript">




var $ = function (id)

{


return "string" == typeof id ? document.getElementById(id) : id;


};






var Class =

{




create: function()

{




return function()

{


this.initialize.apply(this, arguments);


}


}


}






Object.extend = function(destination, source)

{




for (var property in source)

{


destination[property] = source[property];


}


return destination;


}






function addEventHandler(oTarget, sEventType, fnHandler)

{




if (oTarget.addEventListener)

{


oTarget.addEventListener(sEventType, fnHandler, false);




} else if (oTarget.attachEvent)

{


oTarget.attachEvent("on" + sEventType, fnHandler);




} else

{


oTarget["on" + sEventType] = fnHandler;


}


};






var Scroller = Class.create();




Scroller.prototype =

{




initialize: function(idScroller, idScrollMid, options)

{


var oScroll = this, oScroller = $(idScroller), oScrollMid = $(idScrollMid);





this.heightScroller = oScroller.offsetHeight;


this.heightList = oScrollMid.offsetHeight;





if(this.heightList <= this.heightScroller) return;





oScroller.style.overflow = "hidden";


oScrollMid.appendChild(oScrollMid.cloneNode(true));





this.oScroller = oScroller;


this.timer = null;





this.SetOptions(options);





this.side = 1;//1是上 -1是下




switch (this.options.Side)

{


case "down" :


this.side = -1;


break;


case "up" :


default :


this.side = 1;


}







addEventHandler(oScrollMid , "mouseover", function()

{ oScroll.Stop(); });




addEventHandler(oScrollMid , "mouseout", function()

{ oScroll.Start(); });





if(this.options.PauseStep <= 0 || this.options.PauseHeight <= 0) this.options.PauseStep = this.options.PauseHeight = 0;


this.Pause = 0;





this.Start();


},


//设置默认属性




SetOptions: function(options)

{




this.options =

{//默认值


Step: 1,//每次变化的px量


Time: 20,//速度(越大越慢)


Side: "up",//滚动方向:"up"是上,"down"是下


PauseHeight: 0,//隔多高停一次


PauseStep: 1000//停顿时间(PauseHeight大于0该参数才有效)


};




Object.extend(this.options, options ||

{});


},


//滚动




Scroll: function()

{


var iScroll = this.oScroller.scrollTop, iHeight = this.heightList, time = this.options.Time, oScroll = this, iStep = this.options.Step * this.side;







if(this.side > 0)

{




if(iScroll >= (iHeight * 2 - this.heightScroller))

{ iScroll -= iHeight; }




} else

{




if(iScroll <= 0)

{ iScroll += iHeight; }


}







if(this.options.PauseHeight > 0)

{




if(this.Pause >= this.options.PauseHeight)

{


time = this.options.PauseStep;


this.Pause = 0;




} else

{


this.Pause += Math.abs(iStep);


this.oScroller.scrollTop = iScroll + iStep;


}




} else

{ this.oScroller.scrollTop = iScroll + iStep; }







this.timer = window.setTimeout(function()

{ oScroll.Scroll(); }, time);


},


//开始




Start: function()

{


this.Scroll();


},


//停止




Stop: function()

{


clearTimeout(this.timer);


}


};






window.onload = function()

{




new Scroller("idScroller", "idScrollMid",

{ PauseHeight:25 });


}


</script>


<style>




#idScroller *

{margin:0px; padding:0px;}




#idScroller

{line-height:25px;width:500px; height:50px; overflow:hidden; border:1px solid #000000;}




#idScroller ul

{width:100%}




#idScroller li

{width:50%; float:left; overflow:hidden; list-style:none;}


</style>


<div id="idScroller">


<div id="idScrollMid">


<ul>


<li><a href="http://shundebk.cn/">111111111111111111111</a></li>


<li><a href="http://shundebk.cn/">211111111111111111111</a></li>


<li><a href="http://shundebk.cn/">311111111111111111111</a></li>


<li><a href="http://shundebk.cn/">411111111111111111111</a></li>


<li><a href="http://shundebk.cn/">511111111111111111111</a></li>


<li><a href="http://shundebk.cn/">611111111111111111111</a></li>


</ul>


<div style="clear:both;"></div>


</div>


</div>


</body>


</html>

效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: