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 相关文章推荐
JsEasy简介 JsEasy是什么?与下载
Mar 07 Javascript
我也种棵OO树JXTree[js+css+xml]
Apr 02 Javascript
js 获取Listbox选择的值的代码
Apr 15 Javascript
在JavaScript中typeof的用途介绍
Apr 11 Javascript
JavaScript实现16进制颜色值转RGB的方法
Feb 09 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
vue不通过路由直接获取url中参数的方法示例
Aug 24 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
JQuery样式与属性设置方法分析
Dec 07 jQuery
vue实现图片上传预览功能
Dec 23 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
两个php日期控制类实例
2014/12/09 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
简单了解Python中的几种函数
2017/11/03 Python
python中kmeans聚类实现代码
2018/02/23 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
继承公证书
2014/04/09 职场文书
2014年教师节寄语
2014/08/11 职场文书
2014年加油站工作总结
2014/12/04 职场文书