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 相关文章推荐
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
jquery autocomplete自动完成插件的的使用方法
Aug 07 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
Js冒泡事件详解及阻止示例
Mar 21 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
js模块加载方式浅析
Aug 12 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 Javascript
简化版的vue-router实现思路详解
Oct 19 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
Oct 26 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 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学习之正则表达式
2011/04/17 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
AngularJS基础知识
2014/12/21 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
Python中for循环和while循环的基本使用方法
2015/08/21 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python turtle库的画笔控制说明
2020/06/28 Python
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
晨会主持词
2014/03/17 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
初一军训感言
2015/08/01 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS