基於jquery的圖片輪播 tab切換組件_jquery
目前只添加了scroll和none的效果,scroll即滑動的效果,可以支持x和y方向的滑動;none就是沒有任何效果,只是顯示和隱藏,後續需要添加其他效果再做擴展,寫的有點水,呵呵,在此留筆,防止遺失。
Demo Address:http://demo.jb51.net/js/2012/sinaapp/
/**
* 巨無霸輪播
*/
$.fn.loopSlider = function(option) {
var setting = {
// 預設顯示的順序
initIndex: 1 ,
// 加在title節點上的樣式
className: "current",
// 輪播方向,預設為x軸方向輪播
direct: "x",
// 上一張按鈕
prevBtn: "",
// 下一張按鈕
nextBtn: "",
// 上下翻頁按鈕停用的樣式
btnDisable: "disable ",
// 按鈕按下的樣式
btnTouchClass: "",
// 自動輪播
auto: false,
// 自動輪播時間間隔
timeFlag: 4000,
// 輪播效果時間
scrollTime: 350,
// 輪播效果
effect: "scroll",
// 在只有一個輪播元素的時候是否隱藏滑動按鈕
hideBtn: true,
// 是否循環輪播
cycle: true,
// 輪播的內容區的容器路徑
contentContainer: "#imgScroll",
// 輪播的內容區的節點
contentChildTag: "li",
// 標題輪播區域的容器路徑
titleContainer: "#titleScroll",
// 標題輪播區域的節點
titleChildTag: "li",
// 輪播的內容區的陣列
cont: [],
// 輪播的標題區的陣列
tabs: [] ,
// 目前輪播序號
current: 0,
// 定時器
ptr: "",
// 輪播回呼函數,每次輪播回呼函數,每次輪調用,參數為目前輪播的序號
callback: function() {
return true;
}
}
if (option) {
$.extend(setting, option);
}
// 初始化目前呼叫類型的函數
setting.currentMethod = function() {
return true;
}
var boss = $(this);
//如果不是第一個元素先輪播
if (setting.initIndex != 1) {
setting.current = setting.initIndex - 1;
}
// 取得輪播的節點清單
var childList = boss.find(setting.contentContainer " " setting.contentChildTag);
// 取得輪播標題節點清單
var titleList = boss.find(setting.titleContainer " " setting. ;
// 儲存內容區每一個輪播節點
setting.cont = childList;
// 儲存標題的輪播節點
setting.tabs = titleList;
// 如果沒有需要輪播的內容,直接回傳
if (setting.cont.length == 0) {
return;
}
// 為內容區和標題區設定index屬性
childList .each(function(index) {
$(this).attr("index", index);
titleList.eq(index).attr("index", index);
});
// 上下箭頭
var nextBtn = boss.find(setting.nextBtn);
var prevBtn = boss.find(setting.prevBtn);
// 長度
var counts = childList counts = childList .length;
// 輪播容器的父節點
var childParent = childList.parent();
var titleParent = titleList.parent();
if (childList.length setting.current = 0;
}
// 初始化
doInit();
if (childList.length return;
}
/**
* 處理無效果的切換
*/
var doScrollNone = {
process: function(i) {
childList.eq(i).css("display", "block").siblings ().css("display", "none");
titleList.eq(i).addClass(setting.className).siblings().removeClass(setting.className);
// 記錄目前顯示的節點
setting.current = i;
// 呼叫回呼函數
setting.callback(setting.current);
},
init: function() {
setting. currentMethod = doScrollNone;
bindEvent();
// 自動輪播
if (setting.auto) {
processAuto();
}
// 初始化的時候也調用回呼函數
setting.callback(setting.current);
}
};
var doScrollXY = {
c_width: 0,
c_height: 0, // 輪播元素的寬度
this.c_width = childList.width();
// 輪播元素的高度
this.c_height = childList.height();
// x軸方向輪播
if (setting.direct == "x") {
childParent.width(this.c_width * (childList.length > 1 ? counts 1 : counts));
childParent.css("left", -this.c_width * (setting.current));
} else {
childParent.height(this.c_height * (childList.length > 1 ? counts 1 : counts ));
childParent.css("top", -this.c_height * (setting.current));
}
titleList.eq(setting.current).addClass(setting.className).siblings ().removeClass(setting.className);
setting.currentMethod = doScrollXY;
// 綁定事件
bindEvent();
// 初始化的時候也呼叫回呼函數
settingting .callback(setting.current);
// 自動輪播
if (setting.auto) {
processAuto();
}
},
process: function(i , needFast) {
setting.current = i;
//alert(i)
if (setting.direct == "x") {
// 執行效果動畫
childParent. animate({
left: "-" (this.c_width * i)
},
(needFast ? 50 : setting.scrollTime),
function() {
if (setting. current == counts) {
doScrollXY.processMove("left", $(this));
}
if (setting.auto) {
processAuto();
}
}
});
} else {
childParent.animate({
top: "-" (this.c_height * i)
},
(needFast ? 50 : setting.scrollTime),
function() {
if (setting.current == counts) {
doScrollXY.processMove("top", $(this)) ;
}
if (setting.auto) {
processAuto();
}
});
}
if (i == counts) {
i = 0;
}
// 呼叫回呼函數
setting.callback(setting.current);
titleList.eq(i).addClass(setting.className).siblings().removeClass (setting.className);
},
processMove: function(direct, node) {
var childs = node.children();
for (var i = 1; i var removeNode = childs.eq(i).remove();
node.append(removeNode);
}
var first = childs.eq(0). remove();
node.append(第一個);
node.css(直接, "0");
}
};
switch (setting.effect) {
case "none":
doScrollNone.init();
休息;
案例「滾動」:
doScrollXY.init();
休息;
}
}
// 一些初始化操作
function doInit() {
childParent.css("position", "relative");
if (!setting.cycle) {
prevBtn.removeClass(setting.btnDisable );
nextBtn.removeClass(setting.btnDisable);
if (setting.current == 0) {
prevBtn.addClass(setting.btnDisable);
}
if (setting. current == counts - 1) {
nextBtn.addClass(setting.btnDisable);
}
}
// 只有一個元素,並且需要隱藏按鈕
if (childList.length prevBtn.hide();
nextBtn.hide();
}
// 複製第一個元素到最後
if (childList.length > 1) {
var cloneNode = childList.eq(0).clone();
cloneNode.attr("index", counts);
cloneNode.appendTo(childParent);
}
}
/**
* 綁定輪播事件
*/
function bindEvent() {
nextBtn && nextBtn.bind("click",
function(event) {
//按鈕已經被停用
if ($(this).hasClass(setting.btnDisable)) {
return;
}
var cur = setting.current; cur >= 0) {
prevBtn. removeClass(setting.btnDisable);
}
if (cur == counts - 2 && !setting.cycle) {
$(this).addClass (setting.btnDisable);
}
if (cur == 計數) {
setting.current = 1;
} else if (cur == 計數- 1) {
//輪播到最後一個
setting.current = counts;
} else {
setting.current = cur 1;
if (setting.ptr) {
clearInterval(setting .ptr);
setting.ptr = null
; }
$(this).addClass(setting.btnTouchClass);
setting.currentMethod.process(setting.current); );
prevBtn && prevBtn.bind("click",
function( ) {
if ($(this).hasClass(setting.btnDisable)) {
return;
}
var cur = setting.current;
if (cur nextBtn.removeClass(setting.btnDisable);
}
if (cur == 1 && !setting.循環) {
$(this).addClass(setting.btnDisable)
}
setting.current = cur == 0 ? 計數- 1 : cur - 1; ) {
clearInterval(setting.ptr);
setting.ptr = null;
$(this) .addClass(setting.btnTouchClass);
var fast = false; >if (cur == 0) {
fast = true
}
setting.currentMethod.process(setting.current, fast)
});
titleParent && titleParent.bind("click",
function(e) {
var element = $(e.target);
//取得輪播節點
while (element[ 0].tagName != titleList[0].tagName) {
element = element.parent()
}
if (setting.ptr) {
clearInterval(setting .ptr); 🎜>setting.ptr = null;
}
var index = parseInt(element.attr("index"), 10);
if (index != 0) {
prevBtn.removeClass(設定.btnDisable);
} else if (!setting.cycle) {
prevBtn.addClass(setting.btnDisable);
}
if (index != counts - 1) {
nextBtn.removeClass(setting.btnDisable);
} else if (!setting.cycle) {
nextBtn.addClass(setting.btnDisable);
}
Methodting.current.btnDisable);
}
Methodcesscurrent. (index);
});
childParent[0].ontouchstart = handleTouchStart;
// 觸摸螢幕事件
function handleTouchStart(event) {
var eltarement = $(event. );
// 取得標題節點
while (element[0].tagName != childList[0].tagName) {
element = element.parent();
}
if (event.targetTouches.length == 0) {
return;
}
var touch = event.targetTouches[0];
var startX = touch.pageX;
var startY = touch .pageY;
var moveDirect = "";
var currentPosition = setting.direct == "x" ? childParent.css("左") : childParent.css("頂部");
if ("左") : childParent.css("頂部");
if ("左") : childParent.css("頂部");
if ("左") : childParent.css("頂部");
if ("左") : childParent.css("頂部");
if ( setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 手指滑動事件
childParent[0].ontouchmove = handleTouchMove;
function handleTouchMove(moveEvent) {
var movetouch = moveEvent.targetTouches[0]; == 'x') {
var moveX = movetouch.pageX;
var moveY = movetouch.pageY;
var x = moveX - startX;
var y = moveY - startY
; // 這裡的目的是在左右滑動圖片的時候,阻止瀏覽器的預設事件,但是如果是上下滑動的情況,一般是滑動滾動條,不能直接就阻止瀏覽器預設事件,不然會導致使用者在上下滑動的時候頁面停止的情況,這裡設定的是在x軸方向要比在Y軸方向滑動至少多10的像素,可以有效的避免上述情況發生
if (Math.abs(x) - Math.abs (y) > 10) {
// 阻止預設的事件
moveEvent.preventDefault();
childParent.css("left", parseFloat(currentPosition) x);
moveDirect = x > 0 ? "sub": "add";
} else {
return;
}
} else {
// Y軸方向滾動
moveEvent.preventDefault();
var moveY = touch.pageY;
var y = moveY - startY;
childParent.css("top", parseFloat(currentPosition) y);
moveDirect = y > 0 ?sub": "add";
}
childParent[0].ontouchend = handleTouchEnd;
}
//手指離開螢幕
function handleTouchEnd() {
///依照手指移動的方向,判斷下一個要顯示的節點序號
var fast = false;
if (moveDirect == "add") {
if (setting.current == counts) {
setting.current = 1;
} else {
setting.current = setting.current 1;
}
} else {
if (setting.current == 0) {
setting.current = counts - 1;
fast = true;
} else {
setting.current = setting.current - 1;
}
}
// 呼叫對應的處理函數
}
}
// 呼叫對應的處理函數
setting.currentMethod.process(setting.current, fast);
childParent[0].ontouchend = null;
childParent[0].ontouchmove = null;
}
}
}
/**
* 自動輪播
*/
function processAuto() {
if (setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 設定輪播計時器
setting.ptr = setInterval(function() {
if (setting.current == counts) {
setting.current = 1;
} else if (setting.current == counts - 1) {
// 輪播到最後一個
setting.current = counts;
} else {
setting.current = setting.current 11 ;
}
var index = setting.current;
if (index != 0) {
prevBtn.removeClass(setting.btnDisable);
} else if (!setting.cycle) {
prevBtn.addClass(setting.btnDisable);
}
if (index != counts - 1) {
nextBtn.removeClass(setting.btnDisable);
} else if (! setting.cycle) {
nextBtn.addClass(setting.btnDisable);
}
setting.currentMethod.process(setting.current);
},
setting.timeFlaglag); >}
// 傳回一個函數,可以在呼叫返回函數,指定下一次需要輪播的圖片的序號,一般用在點擊一個小圖,然後需要查看大圖的情況下,那麼就只需要給大圖綁定一次輪播事件,再點擊某一張小圖的時候只需要呼叫函數,把對應的序號傳入即可
return function(index) {
if (index index = 0;
} else if (index >= counts) {
index = counts - 1;
}
setting.currentMethod.process(index);
}
setting.currentMethod.process(index);

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

隨著行動裝置的普及,網頁設計需要考慮到不同終端的裝置解析度和螢幕尺寸等因素,以實現良好的使用者體驗。在實現網站的響應式設計時,常常需要使用到圖片輪播效果,以展示多張圖片在有限的視覺視窗中的內容,同時也能夠增強網站的視覺效果。本文將介紹如何使用CSS實現響應式圖片自動輪播效果,並提供程式碼範例和解析。實現思路響應式圖片輪播的實現可以透過CSS的flex佈局來實現。在

JavaScript如何實現圖片的輪播切換效果並加入淡入淡出動畫?圖片輪播是網頁設計中常見的效果之一,透過切換圖片來展示不同的內容,為使用者帶來更好的視覺體驗。在這篇文章中,我將介紹如何使用JavaScript來實現圖片的輪播切換效果,並加入淡入淡出的動畫效果。下面是具體的程式碼範例。首先,我們需要在HTML頁面中建立一個包含輪播圖的容器,並在其中加入

如何使用PHP實現圖片輪播和幻燈片功能在現代網頁設計中,圖片輪播和幻燈片功能已經變得非常流行。這些功能可以為網頁增添一些動態和吸引力,提升使用者體驗。本文將介紹如何使用PHP實現圖片輪播和投影片功能,幫助讀者掌握這項技術。在HTML中建立基礎結構首先,在HTML檔案中建立基礎結構。假設我們的圖片輪播有一個容器以及幾個圖片元素。 HTML程式碼如下

如何使用HTML、CSS和jQuery製作一個動態的圖片輪播在網站設計和開發中,圖片輪播是一個經常使用的功能,用於展示多張圖片或廣告橫幅。透過HTML、CSS和jQuery的結合,我們可以實現一個動態的圖片輪播效果,為網站增加活力和吸引力。本文將介紹如何使用HTML、CSS和jQuery製作一個簡單的動態圖片輪播,並提供具體的程式碼範例。第一步:設定HTML結

如何利用PHP開發一個簡單的圖片輪播功能圖片輪播功能在網頁設計中十分常見,能夠給使用者呈現更好的視覺效果,提升使用者體驗。本文將介紹如何使用PHP開發一個簡單的圖片輪播功能,並給出具體的程式碼範例。首先,我們需要準備一些圖片資源作為輪播的圖片。將這些圖片放在一個資料夾內,並命名為"slider",確保資料夾路徑正確。接下來,我們需要寫一個PHP腳本來取得這些圖

如何透過WordPress外掛實現圖片輪播功能在現今的網站設計中,圖片輪播功能已成為一個常見的需求。它可以讓網站更具吸引力,並且能夠展示多張圖片,達到更好的宣傳效果。在WordPress中,我們可以透過安裝插件來實現圖片輪播功能,本文將介紹一個常見的插件,並提供程式碼範例供參考。一、外掛介紹在WordPress外掛程式庫中,有許多圖片輪播外掛程式可供選擇,其中一款常

如何利用Vue和ElementPlus實現圖片輪播和幻燈片展示在網頁設計中,圖片輪播和幻燈片展示是常見的功能需求。而使用Vue和ElementPlus框架可以輕鬆實現這些功能。本文將介紹如何使用Vue和ElementPlus來創建一個簡單而美觀的圖片輪播和幻燈片展示組件。首先,我們要先安裝Vue和ElementPlus。在命令列中執行以下命令:

JavaScript如何實現圖片輪播功能?圖片輪播是網頁設計中常用的功能之一,它可以顯示多張圖片,以一定的時間間隔自動切換,增加使用者的視覺體驗。在JavaScript中實作圖片輪播功能並不複雜,本文將以具體的程式碼範例來講解實作的方法。首先,我們需要在HTML中建立一個容器,用來顯示圖片和控制輪播的按鈕。可以使用以下程式碼建立一個基本的輪播容器:<
