4 lines
2.4 KiB
JavaScript
4 lines
2.4 KiB
JavaScript
![]() |
/**
|
||
|
* https://github.com/richardchen85/Marquee
|
||
|
*/
|
||
|
var Marquee=function(t){this.elem=null,this.step=0,this.stepInterval=400,this.interval=3e3,this.dir="left",this.autoPlay=!0,this.hoverPause=!0,this.pausing=!1,this.timerStep=null,this.timer=null,this.init(t)};Marquee.prototype={constructor:Marquee,init:function(t){return this.extend(t,this),this.elem?(this.elem.innerHTML+=this.elem.innerHTML,this.loadStyle(),this.hoverPause&&this.bindEvents(),this.autoPlay&&this.startScroll(),void 0):!1},loadStyle:function(){var t=this.elem.children;("left"==this.dir||"right"==this.dir)&&(this.elem.style.width=t[0].offsetWidth*t.length+"px"),"right"==this.dir&&0==this.elem.offsetLeft&&(this.elem.style.left=-this.elem.offsetWidth/2+"px"),"left"==this.dir&&this.elem.offsetLeft==-this.elem.offsetWidth/2&&(this.elem.style.left=0),"down"==this.dir&&0==this.elem.offsetTop&&(this.elem.style.top=-this.elem.offsetHeight/2+"px"),"up"==this.dir&&this.elem.offsetTop==-this.elem.offsetHeight/2&&(this.elem.style.top=0)},bindEvents:function(){var t=this;this.bind(this.elem.parentNode,"mouseover",function(){t.stop(),t.pausing=!0}),this.bind(this.elem.parentNode,"mouseout",function(){t.pausing=!1,t.autoPlay&&t.startScroll()})},stop:function(){clearInterval(this.timer)},doScroll:function(){var t,e,i,s,h,l=this;if("left"==this.dir||"right"==this.dir?(t="left",e="offsetLeft",h=this.elem.offsetWidth/2):(t="top",e="offsetTop",h=this.elem.offsetHeight/2),s="left"==this.dir||"up"==this.dir?-this.step:this.step,0==this.stepInterval)h-Math.abs(this.elem[e])<Math.abs(s)&&(s=s/Math.abs(s)*(h-Math.abs(this.elem[e]))),i=this.elem[e]+s,i=this.fixTarget(s,this.elem[e]+s,h),this.elem.style[t]=i+"px";else{if(null!=this.timerStep)return;this.stop();var n=30/l.stepInterval*s;n=0>n?Math.ceil(n):Math.floor(n),this.timerStep=setInterval(function(){n=n>0?Math.min(n,s):Math.max(n,s),i=l.fixTarget(n,l.elem[e]+n,h),l.elem.style[t]=i+"px",s-=n,0==s&&(clearInterval(l.timerStep),l.timerStep=null,l.autoPlay&&!l.pausing&&l.startScroll())},30)}},fixTarget:function(t,e,i){return 0>t&&Math.abs(e)>=i?0:t>0&&e>=0?-i:e},changeDir:function(t){this.dir=t,this.loadStyle(),this.doScroll()},startScroll:function(){var t=this;this.timer=setInterval(function(){t.doScroll()},t.interval)},extend:function(t,e){for(name in t)e[name]=t[name]},bind:function(t,e,i){t.addEventListener?t.addEventListener(e,i,!1):t.attachEvent?t.attachEvent("on"+e,i):t["on"+e]=hanlder}};
|