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 相关文章推荐
ext读取两种结构的xml的代码
Nov 05 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
jQuery中的编程范式详解
Dec 15 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
JS简单实现tab切换效果的多窗口显示功能
Sep 07 Javascript
vue-router实现tab标签页(单页面)详解
Oct 17 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
Jquery Datatables的使用详解
Jan 30 jQuery
通过javascript实现扫雷游戏代码实例
Feb 09 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 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
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
react路由配置方式详解
2017/08/07 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
python 读写中文json的实例详解
2017/10/29 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python爬虫请求头设置代码
2020/07/28 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
高一家长会邀请函
2014/01/12 职场文书
任命书怎么写
2014/06/04 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
银行柜员工作心得体会
2016/01/23 职场文书