jQuery新闻滚动插件 jquery.roller.js


Posted in Javascript onJune 27, 2011

我在源码里给出了注释,有什么不足之处后或者可以改进的地方, 希望能够大家留言探讨...

效果图(比较朴素):
jQuery新闻滚动插件 jquery.roller.js

;(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.3water.com/js/2011/news_roller_Demo/jquery.roller.html
打包下载 /201106/yuanma/news_roller_Demo.rar
Javascript 相关文章推荐
javascript打印html内容功能的方法示例
Nov 28 Javascript
JS获取url链接字符串 location.href
Dec 23 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 Javascript
Vue中父组件向子组件通信的方法
Jul 11 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
微信小程序用户拒绝授权的处理方法详解
Sep 20 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 Javascript
微信小程序实现拍照和相册选取图片
May 09 Javascript
jquery中获取select选中值的代码
Jun 27 #Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 #Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 #Javascript
读jQuery之十 事件模块概述
Jun 27 #Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 #Javascript
jQuery表格行换色的三种实现方法
Jun 27 #Javascript
19个很有用的 JavaScript库推荐
Jun 27 #Javascript
You might like
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
javascript引导程序
2008/10/26 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
微信小程序实现分享商品海报功能
2019/09/30 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python基于socket实现网络广播的方法
2015/04/29 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
中学生励志演讲稿
2014/04/26 职场文书
工作经验交流材料
2014/12/30 职场文书
家装电话营销开场白
2015/05/29 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android