/**
* @classdescription ģ��marquee����ϲ�������
* @author aken li(www.kxbd.com)
* @dom
*
* @css
* #marquee {width:200px;height:50px;overflow:hidden;}
* @usage
* $('#marquee').kxbdmarquee(options);
* @options
* isequal:true,//���й�����Ԫ�س����ƿ����,true,false
* loop: 0,//ѭ������������0ʱ����
* direction: 'left',//��������'left','right','up','down'
* scrollamount:1,//����
* scrolldelay:20//ʱ��
*/
(function($){
$.fn.kxbdmarquee = function(options){
var opts = $.extend({},$.fn.kxbdmarquee.defaults, options);
return this.each(function(){
var $marquee = $(this);//����Ԫ������
var _scrollobj = $marquee.get(0);//����Ԫ������dom
var scrollw = $marquee.width();//����Ԫ�������ŀ��
var scrollh = $marquee.height();//����Ԫ�������ĸ߶�
var $element = $marquee.children(); //����Ԫ��
var $kids = $element.children();//������Ԫ��
var scrollsize=0;//����Ԫ�سߴ�
var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//�������ͣ�1���ң�0����
//��ֹ������Ԫ�رȹ���Ԫ�ؿ��ȡ����ʵ�ʹ�����Ԫ�ؿ��
$element.css(_type?'width':'height',10000);
//��ȡ����Ԫ�صijߴ�
if (opts.isequal) {
scrollsize = $kids[_type?'outerwidth':'outerheight']() * $kids.length;
}else{
$kids.each(function(){
scrollsize += $(this)[_type?'outerwidth':'outerheight']();
});
}
//����Ԫ���ܳߴ�с�������ߴ磬������
if (scrollsize<(_type?scrollw:scrollh)) return;
//��¡������Ԫ�ؽ�����뵽����Ԫ�غ��趨����Ԫ�ؿ��
$element.append($kids.clone()).css(_type?'width':'height',scrollsize*2);
var nummoved = 0;
function scrollfunc(){
var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollleft':'scrolltop';
if (opts.loop > 0) {
nummoved+=opts.scrollamount;
if(nummoved>scrollsize*opts.loop){
_scrollobj[_dir] = 0;
return clearinterval(moveid);
}
}
if(opts.direction == 'left' || opts.direction == 'up'){
var newpos = _scrollobj[_dir] + opts.scrollamount;
if(newpos>=scrollsize){
newpos -= scrollsize;
}
_scrollobj[_dir] = newpos;
}else{
var newpos = _scrollobj[_dir] - opts.scrollamount;
if(newpos<=0){
newpos += scrollsize;
}
_scrollobj[_dir] = newpos;
}
}
//������ʼ
var moveid = setinterval(scrollfunc, opts.scrolldelay);
//��껮��ֹͣ����
$marquee.hover(
function(){
clearinterval(moveid);
},
function(){
clearinterval(moveid);
moveid = setinterval(scrollfunc, opts.scrolldelay);
}
);
});
};
$.fn.kxbdmarquee.defaults = {
isequal:true,//���й�����Ԫ�س����ƿ����,true,false
loop: 0,//ѭ������������0ʱ����
direction: 'left',//��������'left','right','up','down'
scrollamount:1,//����
scrolldelay:40//ʱ��
};
$.fn.kxbdmarquee.setdefaults = function(settings) {
$.extend( $.fn.kxbdmarquee.defaults, settings );
};
})(jquery);