jQuery新聞滾動(dòng)插件 jquery.roller.js
更新時(shí)間:2011年06月27日 23:35:48 作者:
任務(wù)需要,就寫(xiě)了一個(gè)jQuery新聞滾動(dòng)插件jquery.roller.js,功能相對(duì)比較簡(jiǎn)單,可能往后會(huì)加入ajax一段時(shí)間輪詢 動(dòng)態(tài)加載的功能.下面直接給出源代碼,如果需要可以直接下載
我在源碼里給出了注釋,有什么不足之處后或者可以改進(jìn)的地方, 希望能夠大家留言探討...
效果圖(比較樸素):

;(function($) {
$.fn.roller = function(options) {
var opts = $.extend({}, $.fn.roller.defaults, options),
// 通過(guò)循環(huán)隊(duì)列來(lái)管理滾動(dòng)信息
itemQueue = new Array();
return this.each(function(index) {
var $div = $(this).addClass('roller-container');
// 用給定的數(shù)組進(jìn)行初始化
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 {
//同樣可以用頁(yè)面元素進(jìn)行初始化
}
// 把一開(kāi)始要顯示的條目加入容器中
for(i = 0, len = opts.showNum; i < len; i++) {
if(isUp()) {
$div.append(itemQueue[i]);
} else {
$div.prepend(itemQueue[i]);
}
}
// 把已經(jīng)加入容器的條目副本 放到循環(huán)隊(duì)列的尾部
for(i = 0, len = opts.showNum; i < len; i++) {
var temp = itemQueue.shift();
itemQueue.push(temp.clone());
}
// 取得一個(gè)滾動(dòng)元素
var _item = $('.roller-item:first', this),
// 取得它的外圍高度 包括margin
_outHeight = _item.outerHeight(true),
// 容器的內(nèi)容總高度
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() {
// 鼠標(biāo)進(jìn)入時(shí) 停止?jié)L動(dòng)
opts.hold = true;
}, function() {
// 鼠標(biāo)離開(kāi) 重新開(kāi)始滾動(dòng)
opts.hold = false;
startRolling($(this));
}).trigger('mouseleave');
});
/**
* 滾動(dòng)方向判斷
*/
function isUp() {
if(opts.direction === 'up') return true;
if(opts.direction === 'down') return false;
throw new Error('direction should be "up" or "down"');
}
/**
* 生成一個(gè)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() {
// 是否停止?jié)L動(dòng)
if(!opts.hold) {
var first = null,
_funSelf = arguments.callee;
// 當(dāng)前第一個(gè)元素
first = $div.find('.roller-item:first');
first.animate({marginTop: opts.anim_marginTop},
opts.interval,
function() {
// 從隊(duì)列中取出下一個(gè)條目
var temp = itemQueue.shift();
// 把它的副本放到隊(duì)列的尾部
itemQueue.push(temp.clone());
if(isUp()) {
// 移除當(dāng)前第一個(gè)元素
first.remove();
// 把剛?cè)〕龅臈l目append到容器中
$div.append(temp.hide());
} else {
// 移除當(dāng)前最后一個(gè)元素
$div.find('.roller-item:last').remove();
// 讓當(dāng)前第一個(gè)元素的marginTop恢復(fù)成初始值
first.css('margin-top', opts.orginal_marginTop + 'px');
// 把剛?cè)〕龅臈l目prepend到容器中
$div.prepend(temp.hide());
}
temp.fadeIn(opts.interval - 50);
// 觸發(fā)下一個(gè)循環(huán)
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]';
}
};
// 滾動(dòng)新聞默認(rèn)配置
$.fn.roller.defaults = {
interval: 1000, // 滾動(dòng)間隔
showNum: 5, // 一次顯示新聞數(shù)
hold: false, // 是否停止?jié)L動(dòng)
direction: 'up' // 滾動(dòng)方向
};
})(jQuery);
看下頁(yè)面使用代碼
<DIV id=container>
</DIV>
$('#container').roller({
showNum:4, //顯示個(gè)數(shù)
interval: 1500, //滾動(dòng)的時(shí)間間隔
direction: 'down', //滾動(dòng)方向
items: [{ //內(nèi)容
title: 'ccav滾動(dòng)新聞1', //a的title屬性
html: 'ccav滾動(dòng)新聞1', //a的innerHTML
target: '_blank', //a的target
href: 'http://www.google.com.hk' //a的href
}, {
title: 'ccav滾動(dòng)新聞2',
html: 'ccav滾動(dòng)新聞2',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞3',
html: 'ccav滾動(dòng)新聞3',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞4',
html: 'ccav滾動(dòng)新聞4',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞5',
html: 'ccav滾動(dòng)新聞5',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞6',
html: 'ccav滾動(dòng)新聞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
效果圖(比較樸素):

復(fù)制代碼 代碼如下:
;(function($) {
$.fn.roller = function(options) {
var opts = $.extend({}, $.fn.roller.defaults, options),
// 通過(guò)循環(huán)隊(duì)列來(lái)管理滾動(dòng)信息
itemQueue = new Array();
return this.each(function(index) {
var $div = $(this).addClass('roller-container');
// 用給定的數(shù)組進(jìn)行初始化
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 {
//同樣可以用頁(yè)面元素進(jìn)行初始化
}
// 把一開(kāi)始要顯示的條目加入容器中
for(i = 0, len = opts.showNum; i < len; i++) {
if(isUp()) {
$div.append(itemQueue[i]);
} else {
$div.prepend(itemQueue[i]);
}
}
// 把已經(jīng)加入容器的條目副本 放到循環(huán)隊(duì)列的尾部
for(i = 0, len = opts.showNum; i < len; i++) {
var temp = itemQueue.shift();
itemQueue.push(temp.clone());
}
// 取得一個(gè)滾動(dòng)元素
var _item = $('.roller-item:first', this),
// 取得它的外圍高度 包括margin
_outHeight = _item.outerHeight(true),
// 容器的內(nèi)容總高度
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() {
// 鼠標(biāo)進(jìn)入時(shí) 停止?jié)L動(dòng)
opts.hold = true;
}, function() {
// 鼠標(biāo)離開(kāi) 重新開(kāi)始滾動(dòng)
opts.hold = false;
startRolling($(this));
}).trigger('mouseleave');
});
/**
* 滾動(dòng)方向判斷
*/
function isUp() {
if(opts.direction === 'up') return true;
if(opts.direction === 'down') return false;
throw new Error('direction should be "up" or "down"');
}
/**
* 生成一個(gè)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() {
// 是否停止?jié)L動(dòng)
if(!opts.hold) {
var first = null,
_funSelf = arguments.callee;
// 當(dāng)前第一個(gè)元素
first = $div.find('.roller-item:first');
first.animate({marginTop: opts.anim_marginTop},
opts.interval,
function() {
// 從隊(duì)列中取出下一個(gè)條目
var temp = itemQueue.shift();
// 把它的副本放到隊(duì)列的尾部
itemQueue.push(temp.clone());
if(isUp()) {
// 移除當(dāng)前第一個(gè)元素
first.remove();
// 把剛?cè)〕龅臈l目append到容器中
$div.append(temp.hide());
} else {
// 移除當(dāng)前最后一個(gè)元素
$div.find('.roller-item:last').remove();
// 讓當(dāng)前第一個(gè)元素的marginTop恢復(fù)成初始值
first.css('margin-top', opts.orginal_marginTop + 'px');
// 把剛?cè)〕龅臈l目prepend到容器中
$div.prepend(temp.hide());
}
temp.fadeIn(opts.interval - 50);
// 觸發(fā)下一個(gè)循環(huán)
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]';
}
};
// 滾動(dòng)新聞默認(rèn)配置
$.fn.roller.defaults = {
interval: 1000, // 滾動(dòng)間隔
showNum: 5, // 一次顯示新聞數(shù)
hold: false, // 是否停止?jié)L動(dòng)
direction: 'up' // 滾動(dòng)方向
};
})(jQuery);
看下頁(yè)面使用代碼
復(fù)制代碼 代碼如下:
<DIV id=container>
</DIV>
$('#container').roller({
showNum:4, //顯示個(gè)數(shù)
interval: 1500, //滾動(dòng)的時(shí)間間隔
direction: 'down', //滾動(dòng)方向
items: [{ //內(nèi)容
title: 'ccav滾動(dòng)新聞1', //a的title屬性
html: 'ccav滾動(dòng)新聞1', //a的innerHTML
target: '_blank', //a的target
href: 'http://www.google.com.hk' //a的href
}, {
title: 'ccav滾動(dòng)新聞2',
html: 'ccav滾動(dòng)新聞2',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞3',
html: 'ccav滾動(dòng)新聞3',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞4',
html: 'ccav滾動(dòng)新聞4',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞5',
html: 'ccav滾動(dòng)新聞5',
target: '_blank',
href: 'http://www.google.com.hk'
}, {
title: 'ccav滾動(dòng)新聞6',
html: 'ccav滾動(dòng)新聞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
您可能感興趣的文章:
- jQuery中關(guān)于ScrollableGridPlugin.js(固定表頭)插件的使用逐步解析
- jquery tools 系列 scrollable(2)
- jquery tools 系列 scrollable學(xué)習(xí)
- jQuery控制li上下循環(huán)滾動(dòng)插件用法實(shí)例(附demo源碼下載)
- 基于JQuery實(shí)現(xiàn)仿網(wǎng)易郵箱全屏動(dòng)感滾動(dòng)插件fullPage
- 基于編寫(xiě)jQuery的無(wú)縫滾動(dòng)插件
- 基于jQuery的圖片左右無(wú)縫滾動(dòng)插件
- 超級(jí)有用的13個(gè)基于jQuery的內(nèi)容滾動(dòng)插件和教程
- jcarousellite.js 基于Jquery的圖片無(wú)縫滾動(dòng)插件
- 基于jQuery圖片平滑連續(xù)滾動(dòng)插件
- jQuery滾動(dòng)插件scrollable.js用法分析
相關(guān)文章
jquery實(shí)現(xiàn)仿新浪微博評(píng)論滾動(dòng)效果
這篇文章主要介紹了jquery實(shí)現(xiàn)仿新浪微博評(píng)論滾動(dòng)效果,基于jquery實(shí)現(xiàn)頁(yè)面圖文定時(shí)滾動(dòng)效果,涉及jquery頁(yè)面元素的遍歷與樣式的動(dòng)態(tài)操作技巧,是一款經(jīng)典的jquery滾動(dòng)特效,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08詳解layui中的樹(shù)形關(guān)于取值傳值問(wèn)題
本篇文章主要介紹了詳解layui中的樹(shù)形關(guān)于取值傳值問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01JQuery給元素綁定click事件多次執(zhí)行的解決方法
這篇文章主要介紹了JQuery給元素綁定click事件多次執(zhí)行的解決方法,需要的朋友可以參考下2014-05-05jcarousellite.js 基于Jquery的圖片無(wú)縫滾動(dòng)插件
基于Jquery的圖片無(wú)縫滾動(dòng)插件,需要的朋友可以參考下。2010-12-12jQuery實(shí)現(xiàn)Ajax功能分析【與Flask后臺(tái)交互】
這篇文章主要介紹了jQuery實(shí)現(xiàn)Ajax功能,結(jié)合實(shí)例形式分析了jQuery ajax功能實(shí)現(xiàn)方法以及與Flask后臺(tái)進(jìn)行交互的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06jQuery避免$符和其他JS庫(kù)沖突的方法對(duì)比
jQuery中需要用到$符號(hào),如果其他js庫(kù)也定義了$符號(hào),那么就會(huì)造成沖突,會(huì)影響到j(luò)s代碼的正常執(zhí)行,下面有幾個(gè)不錯(cuò)的解決方法,大家可以參考下2014-02-02

jQuery實(shí)現(xiàn)簡(jiǎn)單日歷效果
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)簡(jiǎn)單日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
2020-07-07 
jquery+css實(shí)現(xiàn)側(cè)邊導(dǎo)航欄效果
這篇文章主要為大家詳細(xì)介紹了jquery+css實(shí)現(xiàn)側(cè)邊導(dǎo)航欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
2017-06-06