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 相关文章推荐
网页中的图片的处理方法与代码
Nov 26 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
js简单判断移动端系统的方法
Feb 25 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 Javascript
Vue实现push数组并删除的例子
Nov 01 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
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 curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
python批量图片处理简单示例
2019/08/06 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
python动态视频下载器的实现方法
2019/09/16 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Python2与Python3的区别详解
2020/02/09 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
keras 多gpu并行运行案例
2020/06/10 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
幼儿教师考核制度
2014/01/25 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
报名委托书
2015/01/29 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书