jQuery新闻滚动插件 jquery.roller.js
jQuery新闻滚动插件 jquery.roller.js
发布时间:2016-12-30 来源:查字典编辑
摘要:我在源码里给出了注释,有什么不足之处后或者可以改进的地方,希望能够大家留言探讨...效果图(比较朴素):复制代码代码如下:;(functio...

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

效果图(比较朴素):

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

复制代码 代码如下:

;(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.jb51.net/js/2011/news_roller_Demo/jquery.roller.html

打包下载 /201106/yuanma/news_roller_Demo.rar

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类