基于jquery的圖片輪播 tab切換組件
更新時(shí)間:2012年07月19日 23:09:18 作者:
最近在做手機(jī)上的web app,很多場(chǎng)景需要使用到類似tab切換和圖片輪播的東西,需要支持手勢(shì)和鼠標(biāo)點(diǎn)擊的,于是就基于jquery弄了一個(gè),每一個(gè)參數(shù)有詳細(xì)的說明
目前只添加了scroll和none的效果,scroll即滑動(dòng)的效果,可以支持x和y方向的滑動(dòng);none就是沒有任何效果,只是顯示和隱藏,后續(xù)需要添加其他效果再做擴(kuò)展,寫的有點(diǎn)水,呵呵,在此留筆,防止丟失。
Demo Address:http://demo.jb51.net/js/2012/sinaapp/
/**
* 巨無霸輪播
*/
$.fn.loopSlider = function(option) {
var setting = {
// 默認(rèn)顯示的順序
initIndex: 1,
// 加在title節(jié)點(diǎn)上的樣式
className: "current",
// 輪播方向,默認(rèn)為x軸方向輪播
direct: "x",
// 上一張按鈕
prevBtn: "",
// 下一張按鈕
nextBtn: "",
// 上下翻頁按鈕禁用的樣式
btnDisable: "disable",
// 按鈕按下的樣式
btnTouchClass: "",
// 自動(dòng)輪播
auto: false,
// 自動(dòng)輪播時(shí)間間隔
timeFlag: 4000,
// 輪播效果時(shí)間
scrollTime: 350,
// 輪播效果
effect: "scroll",
// 在只有一個(gè)輪播元素的時(shí)候是否隱藏滑動(dòng)按鈕
hideBtn: true,
// 是否循環(huán)輪播
cycle: true,
// 輪播的內(nèi)容區(qū)的容器路徑
contentContainer: "#imgScroll",
// 輪播的內(nèi)容區(qū)的節(jié)點(diǎn)
contentChildTag: "li",
// 標(biāo)題輪播區(qū)域的容器路徑
titleContainer: "#titleScroll",
// 標(biāo)題輪播區(qū)域的節(jié)點(diǎn)
titleChildTag: "li",
// 輪播的內(nèi)容區(qū)的數(shù)組
cont: [],
// 輪播的標(biāo)題區(qū)的數(shù)組
tabs: [],
// 當(dāng)前輪播序號(hào)
current: 0,
// 定時(shí)器
ptr: "",
// 輪播回調(diào)函數(shù),每次輪播調(diào)用,參數(shù)為當(dāng)前輪播的序號(hào)
callback: function() {
return true;
}
}
if (option) {
$.extend(setting, option);
}
// 初始化當(dāng)前調(diào)用類型的函數(shù)
setting.currentMethod = function() {
return true;
}
var boss = $(this);
// 如果不是第一個(gè)元素先輪播
if (setting.initIndex != 1) {
setting.current = setting.initIndex - 1;
}
// 獲取輪播的節(jié)點(diǎn)列表
var childList = boss.find(setting.contentContainer + " " + setting.contentChildTag);
// 獲取輪播標(biāo)題節(jié)點(diǎn)列表
var titleList = boss.find(setting.titleContainer + " " + setting.titleChildTag);
// 保存內(nèi)容區(qū)每一個(gè)輪播節(jié)點(diǎn)
setting.cont = childList;
// 保存標(biāo)題的輪播節(jié)點(diǎn)
setting.tabs = titleList;
// 如果沒有需要輪播的內(nèi)容,直接返回
if (setting.cont.length == 0) {
return;
}
// 給內(nèi)容區(qū)和標(biāo)題區(qū)設(shè)置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.length;
// 輪播容器的父節(jié)點(diǎn)
var childParent = childList.parent();
var titleParent = titleList.parent();
if (childList.length < setting.initIndex) {
setting.current = 0;
}
// 初始化
doInit();
if (childList.length <= 1) {
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);
// 記錄當(dāng)前顯示的節(jié)點(diǎn)
setting.current = i;
// 調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
},
init: function() {
setting.currentMethod = doScrollNone;
bindEvent();
// 自動(dòng)輪播
if (setting.auto) {
processAuto();
}
// 初始化的時(shí)候也調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
}
};
var doScrollXY = {
c_width: 0,
c_height: 0,
init: function() {
// 輪播元素的寬度
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();
// 初始化的時(shí)候也調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
// 自動(dòng)輪播
if (setting.auto) {
processAuto();
}
},
process: function(i, needFast) {
setting.current = i;
//alert(i)
if (setting.direct == "x") {
// 執(zhí)行效果動(dòng)畫
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;
}
// 調(diào)用回調(diào)函數(shù)
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 < childs.length - 1; i++) {
var removeNode = childs.eq(i).remove();
node.append(removeNode);
}
var first = childs.eq(0).remove();
node.append(first);
node.css(direct, "0");
}
};
switch (setting.effect) {
case "none":
doScrollNone.init();
break;
case "scroll":
doScrollXY.init();
break;
}
// 一些初始化操作
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);
}
}
// 只有一個(gè)元素,并且需要隱藏按鈕
if (childList.length <= 1 && setting.hideBtn) {
prevBtn.hide();
nextBtn.hide();
}
// 克隆第一個(gè)元素到最后
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) {
// 如果按鈕已經(jīng)被禁用
if ($(this).hasClass(setting.btnDisable)) {
return;
}
var cur = setting.current;
if (cur >= 0) {
prevBtn.removeClass(setting.btnDisable);
}
if (cur == counts - 2 && !setting.cycle) {
$(this).addClass(setting.btnDisable);
}
if (cur == counts) {
setting.current = 1;
} else if (cur == counts - 1) {
// 輪播到最后一個(gè)
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 <= counts - 1) {
nextBtn.removeClass(setting.btnDisable);
}
if (cur == 1 && !setting.cycle) {
$(this).addClass(setting.btnDisable);
}
setting.current = cur == 0 ? counts - 1 : cur - 1;
if (setting.ptr) {
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);
// 得到輪播節(jié)點(diǎn)
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(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(index);
});
childParent[0].ontouchstart = handleTouchStart;
// 觸摸屏幕事件
function handleTouchStart(event) {
var element = $(event.target);
// 得到標(biāo)題節(jié)點(diǎn)
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("left") : childParent.css("top");
if (setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 手指滑動(dòng)事件
childParent[0].ontouchmove = handleTouchMove;
function handleTouchMove(moveEvent) {
var movetouch = moveEvent.targetTouches[0];
if (setting.direct == 'x') {
var moveX = movetouch.pageX;
var moveY = movetouch.pageY;
var x = moveX - startX;
var y = moveY - startY;
// 這里的目的是在左右滑動(dòng)圖片的時(shí)候,阻止瀏覽器的默認(rèn)事件,但是如果是上下滑動(dòng)的情況,一般是滑動(dòng)滾動(dòng)條,不能直接就阻止瀏覽器默認(rèn)事件,不然會(huì)導(dǎo)致用戶在上下滑動(dòng)的時(shí)候頁面停止的情況,這里設(shè)置的是在x軸方向要比在Y軸方向滑動(dòng)至少多10的像素,可以有效的避免上述情況發(fā)生
if (Math.abs(x) - Math.abs(y) > 10) {
// 阻止默認(rèn)的事件
moveEvent.preventDefault();
childParent.css("left", parseFloat(currentPosition) + x);
moveDirect = x > 0 ? "sub": "add";
} else {
return;
}
} else {
// Y軸方向滾動(dòng)
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() {
//根據(jù)手指移動(dòng)的方向,判斷下一個(gè)要顯示的節(jié)點(diǎn)序號(hào)
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;
}
}
// 調(diào)用對(duì)應(yīng)的處理函數(shù)
setting.currentMethod.process(setting.current, fast);
childParent[0].ontouchend = null;
childParent[0].ontouchmove = null;
}
}
}
/**
* 自動(dòng)輪播
*/
function processAuto() {
if (setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 設(shè)置輪播定時(shí)器
setting.ptr = setInterval(function() {
if (setting.current == counts) {
setting.current = 1;
} else if (setting.current == counts - 1) {
// 輪播到最后一個(gè)
setting.current = counts;
} else {
setting.current = setting.current + 1;
}
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.timeFlag);
}
// 返回一個(gè)函數(shù),可以在調(diào)用返回函數(shù),指定下一次需要輪播的圖片的序號(hào),一般用在點(diǎn)擊一個(gè)小圖,然后需要查看大圖的情況下,那么就只需要給大圖綁定一次輪播事件,再點(diǎn)擊某一張小圖的時(shí)候只需要調(diào)用該函數(shù),把對(duì)應(yīng)的序號(hào)傳入即可
return function(index) {
if (index < 0) {
index = 0;
} else if (index >= counts) {
index = counts - 1;
}
setting.currentMethod.process(index);
}
}
Demo Address:http://demo.jb51.net/js/2012/sinaapp/
復(fù)制代碼 代碼如下:
/**
* 巨無霸輪播
*/
$.fn.loopSlider = function(option) {
var setting = {
// 默認(rèn)顯示的順序
initIndex: 1,
// 加在title節(jié)點(diǎn)上的樣式
className: "current",
// 輪播方向,默認(rèn)為x軸方向輪播
direct: "x",
// 上一張按鈕
prevBtn: "",
// 下一張按鈕
nextBtn: "",
// 上下翻頁按鈕禁用的樣式
btnDisable: "disable",
// 按鈕按下的樣式
btnTouchClass: "",
// 自動(dòng)輪播
auto: false,
// 自動(dòng)輪播時(shí)間間隔
timeFlag: 4000,
// 輪播效果時(shí)間
scrollTime: 350,
// 輪播效果
effect: "scroll",
// 在只有一個(gè)輪播元素的時(shí)候是否隱藏滑動(dòng)按鈕
hideBtn: true,
// 是否循環(huán)輪播
cycle: true,
// 輪播的內(nèi)容區(qū)的容器路徑
contentContainer: "#imgScroll",
// 輪播的內(nèi)容區(qū)的節(jié)點(diǎn)
contentChildTag: "li",
// 標(biāo)題輪播區(qū)域的容器路徑
titleContainer: "#titleScroll",
// 標(biāo)題輪播區(qū)域的節(jié)點(diǎn)
titleChildTag: "li",
// 輪播的內(nèi)容區(qū)的數(shù)組
cont: [],
// 輪播的標(biāo)題區(qū)的數(shù)組
tabs: [],
// 當(dāng)前輪播序號(hào)
current: 0,
// 定時(shí)器
ptr: "",
// 輪播回調(diào)函數(shù),每次輪播調(diào)用,參數(shù)為當(dāng)前輪播的序號(hào)
callback: function() {
return true;
}
}
if (option) {
$.extend(setting, option);
}
// 初始化當(dāng)前調(diào)用類型的函數(shù)
setting.currentMethod = function() {
return true;
}
var boss = $(this);
// 如果不是第一個(gè)元素先輪播
if (setting.initIndex != 1) {
setting.current = setting.initIndex - 1;
}
// 獲取輪播的節(jié)點(diǎn)列表
var childList = boss.find(setting.contentContainer + " " + setting.contentChildTag);
// 獲取輪播標(biāo)題節(jié)點(diǎn)列表
var titleList = boss.find(setting.titleContainer + " " + setting.titleChildTag);
// 保存內(nèi)容區(qū)每一個(gè)輪播節(jié)點(diǎn)
setting.cont = childList;
// 保存標(biāo)題的輪播節(jié)點(diǎn)
setting.tabs = titleList;
// 如果沒有需要輪播的內(nèi)容,直接返回
if (setting.cont.length == 0) {
return;
}
// 給內(nèi)容區(qū)和標(biāo)題區(qū)設(shè)置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.length;
// 輪播容器的父節(jié)點(diǎn)
var childParent = childList.parent();
var titleParent = titleList.parent();
if (childList.length < setting.initIndex) {
setting.current = 0;
}
// 初始化
doInit();
if (childList.length <= 1) {
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);
// 記錄當(dāng)前顯示的節(jié)點(diǎn)
setting.current = i;
// 調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
},
init: function() {
setting.currentMethod = doScrollNone;
bindEvent();
// 自動(dòng)輪播
if (setting.auto) {
processAuto();
}
// 初始化的時(shí)候也調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
}
};
var doScrollXY = {
c_width: 0,
c_height: 0,
init: function() {
// 輪播元素的寬度
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();
// 初始化的時(shí)候也調(diào)用回調(diào)函數(shù)
setting.callback(setting.current);
// 自動(dòng)輪播
if (setting.auto) {
processAuto();
}
},
process: function(i, needFast) {
setting.current = i;
//alert(i)
if (setting.direct == "x") {
// 執(zhí)行效果動(dòng)畫
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;
}
// 調(diào)用回調(diào)函數(shù)
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 < childs.length - 1; i++) {
var removeNode = childs.eq(i).remove();
node.append(removeNode);
}
var first = childs.eq(0).remove();
node.append(first);
node.css(direct, "0");
}
};
switch (setting.effect) {
case "none":
doScrollNone.init();
break;
case "scroll":
doScrollXY.init();
break;
}
// 一些初始化操作
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);
}
}
// 只有一個(gè)元素,并且需要隱藏按鈕
if (childList.length <= 1 && setting.hideBtn) {
prevBtn.hide();
nextBtn.hide();
}
// 克隆第一個(gè)元素到最后
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) {
// 如果按鈕已經(jīng)被禁用
if ($(this).hasClass(setting.btnDisable)) {
return;
}
var cur = setting.current;
if (cur >= 0) {
prevBtn.removeClass(setting.btnDisable);
}
if (cur == counts - 2 && !setting.cycle) {
$(this).addClass(setting.btnDisable);
}
if (cur == counts) {
setting.current = 1;
} else if (cur == counts - 1) {
// 輪播到最后一個(gè)
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 <= counts - 1) {
nextBtn.removeClass(setting.btnDisable);
}
if (cur == 1 && !setting.cycle) {
$(this).addClass(setting.btnDisable);
}
setting.current = cur == 0 ? counts - 1 : cur - 1;
if (setting.ptr) {
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);
// 得到輪播節(jié)點(diǎn)
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(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(index);
});
childParent[0].ontouchstart = handleTouchStart;
// 觸摸屏幕事件
function handleTouchStart(event) {
var element = $(event.target);
// 得到標(biāo)題節(jié)點(diǎn)
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("left") : childParent.css("top");
if (setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 手指滑動(dòng)事件
childParent[0].ontouchmove = handleTouchMove;
function handleTouchMove(moveEvent) {
var movetouch = moveEvent.targetTouches[0];
if (setting.direct == 'x') {
var moveX = movetouch.pageX;
var moveY = movetouch.pageY;
var x = moveX - startX;
var y = moveY - startY;
// 這里的目的是在左右滑動(dòng)圖片的時(shí)候,阻止瀏覽器的默認(rèn)事件,但是如果是上下滑動(dòng)的情況,一般是滑動(dòng)滾動(dòng)條,不能直接就阻止瀏覽器默認(rèn)事件,不然會(huì)導(dǎo)致用戶在上下滑動(dòng)的時(shí)候頁面停止的情況,這里設(shè)置的是在x軸方向要比在Y軸方向滑動(dòng)至少多10的像素,可以有效的避免上述情況發(fā)生
if (Math.abs(x) - Math.abs(y) > 10) {
// 阻止默認(rèn)的事件
moveEvent.preventDefault();
childParent.css("left", parseFloat(currentPosition) + x);
moveDirect = x > 0 ? "sub": "add";
} else {
return;
}
} else {
// Y軸方向滾動(dòng)
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() {
//根據(jù)手指移動(dòng)的方向,判斷下一個(gè)要顯示的節(jié)點(diǎn)序號(hào)
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;
}
}
// 調(diào)用對(duì)應(yīng)的處理函數(shù)
setting.currentMethod.process(setting.current, fast);
childParent[0].ontouchend = null;
childParent[0].ontouchmove = null;
}
}
}
/**
* 自動(dòng)輪播
*/
function processAuto() {
if (setting.ptr) {
clearInterval(setting.ptr);
setting.ptr = null;
}
// 設(shè)置輪播定時(shí)器
setting.ptr = setInterval(function() {
if (setting.current == counts) {
setting.current = 1;
} else if (setting.current == counts - 1) {
// 輪播到最后一個(gè)
setting.current = counts;
} else {
setting.current = setting.current + 1;
}
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.timeFlag);
}
// 返回一個(gè)函數(shù),可以在調(diào)用返回函數(shù),指定下一次需要輪播的圖片的序號(hào),一般用在點(diǎn)擊一個(gè)小圖,然后需要查看大圖的情況下,那么就只需要給大圖綁定一次輪播事件,再點(diǎn)擊某一張小圖的時(shí)候只需要調(diào)用該函數(shù),把對(duì)應(yīng)的序號(hào)傳入即可
return function(index) {
if (index < 0) {
index = 0;
} else if (index >= counts) {
index = counts - 1;
}
setting.currentMethod.process(index);
}
}
您可能感興趣的文章:
- 12款經(jīng)典的白富美型—jquery圖片輪播插件—前端開發(fā)必備
- Jquery代碼實(shí)現(xiàn)圖片輪播效果(一)
- 原生js和jquery實(shí)現(xiàn)圖片輪播特效
- jQuery圖片輪播的具體實(shí)現(xiàn)
- 基于JQuery的實(shí)現(xiàn)圖片輪播效果(焦點(diǎn)圖)
- 原生js和jquery實(shí)現(xiàn)圖片輪播淡入淡出效果
- jQuery手動(dòng)點(diǎn)擊實(shí)現(xiàn)圖片輪播特效
- 基于jQuery實(shí)現(xiàn)左右圖片輪播(原理通用)
- jQuery左右滾動(dòng)支持圖片放大縮略圖圖片輪播代碼分享
- 使用jQuery實(shí)現(xiàn)圖片輪播效果
相關(guān)文章
jquery實(shí)現(xiàn)簡單的表單驗(yàn)證
這篇文章主要介紹了jquery實(shí)現(xiàn)簡單的表單驗(yàn)證,思路大概是先為每一個(gè)required添加必填的標(biāo)記,用each()方法來實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2015-11-11JQuery中$.ajax()方法參數(shù)詳解及應(yīng)用
JQuery中$.ajax()方法想必大家并不陌生吧,在本文將為大家介紹下其參數(shù)及應(yīng)用示例,感興趣的朋友不要錯(cuò)過2013-12-12點(diǎn)擊表單提交時(shí)出現(xiàn)jQuery沒有權(quán)限的解決方法
擊表單提交的時(shí)候會(huì)出現(xiàn) jQuery 沒有權(quán)限,試了一下jquery自帶的json方式提交成功2014-07-07jQuery實(shí)現(xiàn)的鼠標(biāo)響應(yīng)緩沖動(dòng)畫效果示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的鼠標(biāo)響應(yīng)緩沖動(dòng)畫效果,涉及jQuery事件響應(yīng)、數(shù)值運(yùn)算及頁面元素動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下2018-02-02jQuery中ajax的相關(guān)知識(shí)點(diǎn)匯總
這篇文章主要給大家介紹了關(guān)于jQuery中ajax相關(guān)知識(shí)點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03jQuery獲取復(fù)選框被選中數(shù)量及判斷選擇值的方法詳解
這篇文章主要介紹了jQuery獲取復(fù)選框被選中數(shù)量及判斷選擇值的方法,結(jié)合實(shí)例形式分析了jQuery操作復(fù)選框進(jìn)行判定與統(tǒng)計(jì)的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2016-05-05jQuery結(jié)合CSS制作漂亮的select下拉菜單
對(duì)于我來說,標(biāo)準(zhǔn)的HTML元素(Select)已經(jīng)讓我感到討厭。它不能夠正常的在IE瀏覽器上顯示。還有一點(diǎn)就是他并不僅僅包含簡單的文本。本實(shí)例將完全摒棄select元素,通過JQuery和CSS來構(gòu)建DropDown元素。2015-05-05