"use strict"; /** * @classdescription 模拟marquee,无间断滚动内容 * @author lyc 修改 * @dom *
* *
* @css * #marquee {overflow:hidden;width:200px;height:50px;} * @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; //滚动元素尺寸 //滚动类型,1左右,0上下 var _type = opts.direction == "left" || opts.direction == "right" ? 1 : 0; //防止滚动子元素比滚动元素宽而取不到实际滚动子元素宽度 $element.css(_type ? "width" : "height", 10000); //获取滚动元素的尺寸 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: 20 //时长 }; $.fn.kxbdmarquee.setdefaults = function (settings) { $.extend($.fn.kxbdmarquee.defaults, settings); }; })(jquery); //# sourcemappingurl=jquery.kxbdmarquee.js.map