1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| $.fn.autoscroll = function(params){
params = jQuery.extend({
direction: 'vertical',
speed: 10,
pauseDelay: 1000
}, params);
$(this).each(function(i,elm){
var container = $(elm);
container.wrap("<div class='autoscroll-wrapper' style='overflow: hidden'></div>");
var wrapper = container.parent('.autoscroll-wrapper');
$(["top","right","bottom","left"]).each(function(i,dir){
wrapper.css("margin-"+dir,container.css("margin-"+dir));
container.css("margin-"+dir,0);
});
var posAttr=["scrollTop","scrollLeft"], dimAttr=["height","width"], sdimAttr=["scrollHeight","scrollWidth"];
if(params.direction === 'horizontal'){ posAttr.reverse(); dimAttr.reverse(); sdimAttr.reverse(); }
var s, d, o, t, dt = Math.round(1000/params.speed);
function scrollLoop(){
if(s+o<d+1){
container[posAttr[0]](s);
t = setTimeout(scrollLoop, dt);
s++;
} else {
t = setTimeout(function(){
s=0;
t = setTimeout(scrollLoop, params.pauseDelay);
}, params.pauseDelay);
}
}
function initAutoscroll(){
d = container.prop(sdimAttr[0]);
o = container[dimAttr[0]]();
wrapper[dimAttr[1]](container.prop(sdimAttr[1]));
s=0;
if(t!=null){ clearTimeout(t); }
if(o < d){ scrollLoop(); }
}
$(window).resize(initAutoscroll);
initAutoscroll();
container.on("DOMNodeRemovedFromDocument", function(){ if(t!=null){ clearTimeout(t); } });
});
return this;
}; |
Partager