我在源码里给出了注释,有什么不足之处后或者可以改进的地方, 希望能够大家留言探讨...
效果图(比较朴素):
复制代码 代码如下:
;(function($) {
$.fn.roller = function(options) {
var opts = $.extend({}, $.fn.roller.defaults, options),
// 通过循环队列来管理滚动信息
itemQueue = new Array();
return this.each(function(index) {
var $div = $(this).addClass('roller-container');
// 用给定的数组进行初始化
if(opts.items && Util.isArray(opts.items)) {
for(var i = 0, len = opts.items.length; i < len; i++) {
itemQueue.push($('<DIV class=roller-item></DIV>').append(buildLink(opts.items[i])));
}
} else {
//同样可以用页面元素进行初始化
}
// 把一开始要显示的条目加入容器中
for(i = 0, len = opts.showNum; i < len; i++) {
if(isUp()) {
$div.append(itemQueue[i]);
} else {
$div.prepend(itemQueue[i]);
}
}
// 把已经加入容器的条目副本 放到循环队列的尾部
for(i = 0, len = opts.showNum; i < len; i++) {
var temp = itemQueue.shift();
itemQueue.push(temp.clone());
}
// 取得一个滚动元素
var _item = $('.roller-item:first', this),
// 取得它的外围高度 包括margin
_outHeight = _item.outerHeight(true),
// 容器的内容总高度
totalHeight = _outHeight * parseInt(opts.showNum, 10);
// 保存初始marginTop值
opts.orginal_marginTop = parseInt(_item.css('margin-top'), 10);
if(isUp()) {
opts.anim_marginTop = opts.orginal_marginTop - _outHeight - parseInt($div.css('padding-top'), 10);
} else {
opts.anim_marginTop = opts.orginal_marginTop + _outHeight;
}
// 初始化容器样式和事件
$div.css({
'height': totalHeight + 'px',
'overflow': 'hidden'
}).hover(function() {
// 鼠标进入时 停止滚动
opts.hold = true;
}, function() {
// 鼠标离开 重新开始滚动
opts.hold = false;
startRolling($(this));
}).trigger('mouseleave');
});
/**
* 滚动方向判断
*/
function isUp() {
if(opts.direction === 'up') return true;
if(opts.direction === 'down') return false;
throw new Error('direction should be "up" or "down"');
}
/**
* 生成一个jQuery封装的<A></A>
*/
function buildLink(item) {
var html = item.html;
delete item.html;
return $('<A></A>').attr(item).html(html);
}
function startRolling($div) {
setTimeout(function() {
// 是否停止滚动
if(!opts.hold) {
var first = null,
_funSelf = arguments.callee;
// 当前第一个元素
first = $div.find('.roller-item:first');
first.animate({marginTop: opts.anim_marginTop},
opts.interval,
function() {
// 从队列中取出下一个条目
var temp = itemQueue.shift();
// 把它的副本放到队列的尾部
itemQueue.push(temp.clone());
if(isUp()) {
// 移除当前第一个元素
first.remove();
// 把刚取出的条目append到容器中
$div.append(temp.hide());
} else {
// 移除当前最后一个元素
$div.find('.roller-item:last').remove();
// 让当前第一个元素的marginTop恢复成初始值
first.css('margin-top', opts.orginal_marginTop + 'px');
// 把刚取出的条目prepend到容器中
$div.prepend(temp.hide());
}
temp.fadeIn(opts.interval - 50);
// 触发下一个循环
setTimeout(_funSelf, opts.interval);
});
}
}, opts.interval);
};
};
//工具方法集合
var Util = {
toString: function(v) {
return Object.prototype.toString.apply(v);
},
// 判断是否是Array
isArray : function(v){
return Util.toString(v) === '[object Array]';
}
};
// 滚动新闻默认配置
$.fn.roller.defaults = {
interval: 1000, // 滚动间隔
showNum: 5, // 一次显示新闻数
hold: false, // 是否停止滚动
direction: 'up' // 滚动方向
};
})(jQuery);
看下页面使用代码
复制代码 代码如下:
<DIV id=container>
</DIV>
$('#container').roller({
showNum:4, //显示个数
interval: 1500, //滚动的时间间隔
direction: 'down', //滚动方向
items: [{ //内容
title: 'ccav滚动新闻1', //a的title属性
html: 'ccav滚动新闻1', //a的innerHTML
target: '_blank', //a的target
href: 'http://www.google.com.hk' //a的href
}, {
title: 'ccav滚动新闻2',
html: 'ccav滚动新闻2',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滚动新闻3',
html: 'ccav滚动新闻3',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滚动新闻4',
html: 'ccav滚动新闻4',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滚动新闻5',
html: 'ccav滚动新闻5',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滚动新闻6',
html: 'ccav滚动新闻6',
target: '_blank',
href: 'http://www.google.com.hk'
}]
});
在线演示 http://demo./js/2011/news_roller_Demo/jquery.roller.html
打包下载 /201106/yuanma/news_roller_Demo.rar
相关推荐:
ChatGPT为什么访问不了了?了解背后的原因与解决方法,AI怎么拖入路径
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
SEO学堂:开启数字营销新时代,全面提升网站排名与流量,文山ai营销推广方案
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
2025年整站SEO排名优化策略:让你的网站脱颖而出,id排版ai
AI助手推进:智能化时代的企业革命,ai改变图片颜色
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
SEO门户:打造高效网站流量的关键利器,创意网站建设要求
打造内容创作新高度:文章扩写AI的革命性优势
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
亚马逊产品seo什么意思,亚马逊平台产品专业术语 ,小新同学ai
为什么“360收录”是你网站推广的必备利器,seo亚马逊
ChatGPT破解:人工智能的无限潜力与破解秘笈,意识变ai
SEO优化如何为网站做好关键词研究和优化,ai直通
seo深度优化插件是什么,深度优化手机软件 ,ai的缩写
seo用什么写属性写,seo属于什么 ,芭田科学施肥AI
优化网站的秘诀:提高网站速度与用户体验,助力业务腾飞,旅游网站建设步骤
为什么选择B站VIP?让你畅享更丰富的视听体验,小门类网站seo
怎么用AI写文章:高效创作的秘诀
SEO针对中小企业的增长潜力:如何通过精准优化抢占市场先机,网络推广和营销就选y火10星评价
SEO发明:引领数字时代营销革命的力量,速卖通外贸推广网站
SEO目的:如何通过精准优化提高网站流量与转化率,百度推广网站关键词
seo监控什么意思,seo数据监控 ,ai panda眼镜架
SEO排位:如何通过精准策略提升网站排名,获得流量与转化,林海网络推广营销
什么是seo伪原创,seo就业前景伪原创怎么写 ,头像ai画怎么弄
2025年SEO最新技术:让你的网站脱颖而出!,ai少女特色
AI免费生成文本,内容创作新篇章
ChatGPT服务异常:为何影响到你的工作和生活?如何有效解决?,ai怎么保持圆角不变
ChatGPT在处理文本时可能无法完全理解上下文的复杂性,肌肉ai
ChatGPT的VPN梯子:畅享全球互联网自由,打破地域限制,一直搜Ai
用AI写的文章算原创吗?真相揭示,带你深度思考!
ChatGPT:OpenAI的创新之作-一款颠覆传统的语言模型,ai球衣号
SEO招标:如何通过专业SEO服务助力企业脱颖而出,牡丹江关键词排名怎么样
seo网站关键字排名优化,网站seo关键词 ,运动ai
“爱站”:开启网站优化与流量增长的新纪元,seo入门ppt
乘风SEO-引领企业互联网时代的腾飞之路,南昌b站关键词排名优化贵不贵
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
ChatGPT崩溃!用户反馈网页端无法访问,修复急需,ai院子
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
WPQQ-开启数字时代的智能连接新纪元,杭州网站推广厂家电话
打造内容创作新时代:有言AI生成助力创作者释放灵感
SEO架构:提升网站流量的核心策略,东营南江全平台营销推广
ChatGPT怎么打不开了?揭秘背后的原因与解决方法,ai中打开ai文件丢失
SEO需要:如何提升网站排名,打造高效营销利器,seo怎么推广关键词
ChatGPT出现报错503?这些解决办法你必须知道!,粉墨ai说唱
seo需要会什么,seo要会些什么 ,ai313414919
seo高手有什么条件,seo难上手吗 ,指南ai写作电力创新
SEO外,如何提升网站整体营销效果?,文轩网络营销推广方案