基于jQuery的可以控制左右滾動(dòng)及自動(dòng)滾動(dòng)效果的代碼
更新時(shí)間:2010年07月25日 23:38:44 作者:
迷上jQuery,相對(duì)于原生JavaScript,它是如此的美妙.也因此,促使我更加的努力的研習(xí)原生JavaScript.
分享一個(gè)控制左右滾動(dòng)及自動(dòng)滾動(dòng)的樣例, 昨晚花了兩個(gè)多小時(shí), 忍受著悍蚊的叮咬, 汗水的侵襲, 一行行的敲出來(lái)的血汗代碼. 哈哈.
封裝了兩種模式: 點(diǎn)擊滾動(dòng)版本DEMO 自動(dòng)滾動(dòng)版本DEMO,源碼中有詳細(xì)注釋.
思路:
點(diǎn)擊滾動(dòng)模式下,是為點(diǎn)擊(向前/向后/數(shù)字)添加click事件,通過(guò)控制展示區(qū)塊left值實(shí)現(xiàn)切換.
1.向前(左):當(dāng)在第一個(gè)版面時(shí),滾動(dòng)到最后一個(gè)頁(yè)面,否則,累加left值,向前滾動(dòng);
2.向后(右):當(dāng)在最后一個(gè)版面時(shí),滾動(dòng)到第一個(gè)頁(yè)面,否則,累減left值,向后滾動(dòng);
3.數(shù)字點(diǎn)擊:利用index(…)獲取當(dāng)前點(diǎn)擊在數(shù)字列表中的索引值, 然后索引值為倍數(shù)為外圍寬度負(fù)值.即可達(dá)到切換.
核心代碼:
//@Mr.Think***向前滾動(dòng)
$pre.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
if ($cur == 1) { //在第一個(gè)版面時(shí),再向前滾動(dòng)到最后一個(gè)版面
$showbox.animate({
left: '-=' + $w * ($pages - 1)
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間,下同
$cur = $pages; //初始化版面為最后一個(gè)版面
}
else {
$showbox.animate({
left: '+=' + $w
}, 500); //改變left值,切換顯示版面
$cur--; //版面累減
}
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //為對(duì)應(yīng)的版面數(shù)字加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
//@Mr.Think***向后滾動(dòng)
$next.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
if ($cur == $pages) { //在最后一個(gè)版面時(shí),再向后滾動(dòng)到第一個(gè)版面
$showbox.animate({
left: 0
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間,下同
$cur = 1; //初始化版面為第一個(gè)版面
}
else {
$showbox.animate({
left: '-=' + $w
}, 500);//改變left值,切換顯示版面
$cur++; //版面數(shù)累加
}
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //為對(duì)應(yīng)的版面數(shù)字加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
//@Mr.Think***數(shù)字點(diǎn)擊事件
$num.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
var $index = $num.index(this); //索引出當(dāng)前點(diǎn)擊在列表中的位置值
$showbox.animate({
left: '-' + ($w * $index)
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間
$cur = $index + 1; //初始化版面值,這一句可避免當(dāng)滾動(dòng)到第三版時(shí),點(diǎn)擊向后按鈕,出面空白版.index()取值是從0開(kāi)始的,故加1
$(this).addClass('numcur').siblings().removeClass('numcur'); //為當(dāng)前點(diǎn)擊加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
自動(dòng)滾動(dòng)模式是基于點(diǎn)擊滾動(dòng)模式加強(qiáng)的,無(wú)非是添加了自動(dòng)滾動(dòng)事件,以及當(dāng)鼠標(biāo)劃上時(shí)清除動(dòng)畫(huà)事件.
這里要說(shuō)明一點(diǎn).DEMO演示中,為向前/向后/數(shù)字/區(qū)域都添加了當(dāng)鼠標(biāo)劃過(guò)時(shí)都添加了清除動(dòng)畫(huà)事件.但是,如果你的頁(yè)面中,這幾個(gè)需要添加清除動(dòng)畫(huà)事件的都在同一個(gè)區(qū)域內(nèi),完全可以用trigger(…)模擬實(shí)現(xiàn)自動(dòng)滾動(dòng).
還有一點(diǎn),自動(dòng)滾動(dòng)中是用setTimeout(“fun”,interval)實(shí)現(xiàn),而不用setInterval(“fun”,interval)實(shí)現(xiàn). 原因在于,setInterval是在間隔時(shí)間后重復(fù)執(zhí)行傳入的函數(shù),而setTimeout只在間隔時(shí)間后執(zhí)行一次函數(shù)傳入函數(shù),這樣即可避免第二次鼠標(biāo)劃入停止動(dòng)畫(huà)區(qū)域時(shí)不能清除動(dòng)畫(huà).
核心代碼:
......
//@Mr.Think***調(diào)用自動(dòng)滾動(dòng)
autoSlide();
......
//@Mr.Think***停止?jié)L動(dòng)
clearFun($showbox);
clearFun($pre);
clearFun($next);
clearFun($num);
//@Mr.Think***事件劃入時(shí)停止自動(dòng)滾動(dòng)
function clearFun(elem){
elem.hover(function(){
clearAuto();
}, function(){
autoSlide();
});
}
//@Mr.Think***自動(dòng)滾動(dòng)
function autoSlide(){
$next.trigger('click');
$autoFun = setTimeout(autoSlide, 3000);//此處不可使用setInterval,setInterval是重復(fù)執(zhí)行傳入函數(shù),這會(huì)引起第二次劃入時(shí)停止失效
}
//@Mr.Think***清除自動(dòng)滾動(dòng)
function clearAuto(){
clearTimeout($autoFun);
}
更詳細(xì)代碼分析,請(qǐng)查看源碼,寫有詳細(xì)的注釋.
代碼打包下載
封裝了兩種模式: 點(diǎn)擊滾動(dòng)版本DEMO 自動(dòng)滾動(dòng)版本DEMO,源碼中有詳細(xì)注釋.
思路:
點(diǎn)擊滾動(dòng)模式下,是為點(diǎn)擊(向前/向后/數(shù)字)添加click事件,通過(guò)控制展示區(qū)塊left值實(shí)現(xiàn)切換.
1.向前(左):當(dāng)在第一個(gè)版面時(shí),滾動(dòng)到最后一個(gè)頁(yè)面,否則,累加left值,向前滾動(dòng);
2.向后(右):當(dāng)在最后一個(gè)版面時(shí),滾動(dòng)到第一個(gè)頁(yè)面,否則,累減left值,向后滾動(dòng);
3.數(shù)字點(diǎn)擊:利用index(…)獲取當(dāng)前點(diǎn)擊在數(shù)字列表中的索引值, 然后索引值為倍數(shù)為外圍寬度負(fù)值.即可達(dá)到切換.
核心代碼:
復(fù)制代碼 代碼如下:
//@Mr.Think***向前滾動(dòng)
$pre.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
if ($cur == 1) { //在第一個(gè)版面時(shí),再向前滾動(dòng)到最后一個(gè)版面
$showbox.animate({
left: '-=' + $w * ($pages - 1)
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間,下同
$cur = $pages; //初始化版面為最后一個(gè)版面
}
else {
$showbox.animate({
left: '+=' + $w
}, 500); //改變left值,切換顯示版面
$cur--; //版面累減
}
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //為對(duì)應(yīng)的版面數(shù)字加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
//@Mr.Think***向后滾動(dòng)
$next.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
if ($cur == $pages) { //在最后一個(gè)版面時(shí),再向后滾動(dòng)到第一個(gè)版面
$showbox.animate({
left: 0
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間,下同
$cur = 1; //初始化版面為第一個(gè)版面
}
else {
$showbox.animate({
left: '-=' + $w
}, 500);//改變left值,切換顯示版面
$cur++; //版面數(shù)累加
}
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //為對(duì)應(yīng)的版面數(shù)字加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
//@Mr.Think***數(shù)字點(diǎn)擊事件
$num.click(function(){
if (!$showbox.is(':animated')) { //判斷展示區(qū)是否動(dòng)畫(huà)
var $index = $num.index(this); //索引出當(dāng)前點(diǎn)擊在列表中的位置值
$showbox.animate({
left: '-' + ($w * $index)
}, 500); //改變left值,切換顯示版面,500(ms)為滾動(dòng)時(shí)間
$cur = $index + 1; //初始化版面值,這一句可避免當(dāng)滾動(dòng)到第三版時(shí),點(diǎn)擊向后按鈕,出面空白版.index()取值是從0開(kāi)始的,故加1
$(this).addClass('numcur').siblings().removeClass('numcur'); //為當(dāng)前點(diǎn)擊加上高亮樣式,并移除同級(jí)元素的高亮樣式
}
});
自動(dòng)滾動(dòng)模式是基于點(diǎn)擊滾動(dòng)模式加強(qiáng)的,無(wú)非是添加了自動(dòng)滾動(dòng)事件,以及當(dāng)鼠標(biāo)劃上時(shí)清除動(dòng)畫(huà)事件.
這里要說(shuō)明一點(diǎn).DEMO演示中,為向前/向后/數(shù)字/區(qū)域都添加了當(dāng)鼠標(biāo)劃過(guò)時(shí)都添加了清除動(dòng)畫(huà)事件.但是,如果你的頁(yè)面中,這幾個(gè)需要添加清除動(dòng)畫(huà)事件的都在同一個(gè)區(qū)域內(nèi),完全可以用trigger(…)模擬實(shí)現(xiàn)自動(dòng)滾動(dòng).
還有一點(diǎn),自動(dòng)滾動(dòng)中是用setTimeout(“fun”,interval)實(shí)現(xiàn),而不用setInterval(“fun”,interval)實(shí)現(xiàn). 原因在于,setInterval是在間隔時(shí)間后重復(fù)執(zhí)行傳入的函數(shù),而setTimeout只在間隔時(shí)間后執(zhí)行一次函數(shù)傳入函數(shù),這樣即可避免第二次鼠標(biāo)劃入停止動(dòng)畫(huà)區(qū)域時(shí)不能清除動(dòng)畫(huà).
核心代碼:
復(fù)制代碼 代碼如下:
......
//@Mr.Think***調(diào)用自動(dòng)滾動(dòng)
autoSlide();
......
//@Mr.Think***停止?jié)L動(dòng)
clearFun($showbox);
clearFun($pre);
clearFun($next);
clearFun($num);
//@Mr.Think***事件劃入時(shí)停止自動(dòng)滾動(dòng)
function clearFun(elem){
elem.hover(function(){
clearAuto();
}, function(){
autoSlide();
});
}
//@Mr.Think***自動(dòng)滾動(dòng)
function autoSlide(){
$next.trigger('click');
$autoFun = setTimeout(autoSlide, 3000);//此處不可使用setInterval,setInterval是重復(fù)執(zhí)行傳入函數(shù),這會(huì)引起第二次劃入時(shí)停止失效
}
//@Mr.Think***清除自動(dòng)滾動(dòng)
function clearAuto(){
clearTimeout($autoFun);
}
更詳細(xì)代碼分析,請(qǐng)查看源碼,寫有詳細(xì)的注釋.
代碼打包下載
您可能感興趣的文章:
- 基于jQuery的左右滾動(dòng)實(shí)現(xiàn)代碼
- 基于jquery可配置循環(huán)左右滾動(dòng)例子
- 基于Jquery實(shí)現(xiàn)的一個(gè)圖片滾動(dòng)切換
- Jquery圖片滾動(dòng)與幻燈片的實(shí)例代碼
- jQuery bxCarousel實(shí)現(xiàn)圖片滾動(dòng)切換效果示例代碼
- jQuery圖片滾動(dòng)圖片的效果(另類實(shí)現(xiàn))
- jquery左右滾動(dòng)焦點(diǎn)圖banner圖片鼠標(biāo)經(jīng)過(guò)顯示上下頁(yè)按鈕
- jQuery實(shí)現(xiàn)公告文字左右滾動(dòng)的實(shí)例代碼
- jquery實(shí)現(xiàn)圖片滾動(dòng)效果的簡(jiǎn)單實(shí)例
- 利用jQuery簡(jiǎn)單實(shí)現(xiàn)產(chǎn)品展示圖片左右滾動(dòng)功能(示例代碼)
- JQuery 圖片滾動(dòng)輪播示例代碼
- 一個(gè)jquery實(shí)現(xiàn)的不錯(cuò)的多行文字圖片滾動(dòng)效果
- jquery圖片滾動(dòng)放大代碼分享(1)
- jQuery實(shí)現(xiàn)圖片左右滾動(dòng)特效
相關(guān)文章
jquery form表單提交插件asp.net后臺(tái)中文解碼
對(duì)于jquery form表單提交插件jquery.form.js,在提交表單數(shù)據(jù)時(shí),如果表單數(shù)據(jù)有中文,則被提交的數(shù)據(jù)是要經(jīng)過(guò)編碼的。2010-06-06
jQuery插件之Tocify動(dòng)態(tài)節(jié)點(diǎn)目錄菜單生成器附源碼下載
Tocify是一個(gè)能夠動(dòng)態(tài)生成文章節(jié)點(diǎn)目錄的jQuery插件,通過(guò)本文給大家分享jQuery插件之Tocify動(dòng)態(tài)節(jié)點(diǎn)目錄菜單生成器,對(duì)tocify菜單生成器相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01
jQuery EasyUI API 中文幫助文檔和擴(kuò)展實(shí)例
這篇文章主要介紹了jQuery EasyUI API 中文幫助文檔和擴(kuò)展實(shí)例 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
jQueryUI DatePicker 添加時(shí)分秒
本文主要介紹jQueryUI DatePicker添加時(shí)分秒的方法,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。2016-06-06
jquery計(jì)算出left和top,讓一個(gè)div水平垂直居中的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇jquery計(jì)算出left和top,讓一個(gè)div水平垂直居中的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
jQuery插件FusionCharts繪制的3D雙柱狀圖效果示例【附demo源碼】
這篇文章主要介紹了jQuery插件FusionCharts繪制的3D雙柱狀圖效果,涉及jQuery使用插件FusionCharts結(jié)合x(chóng)ml數(shù)據(jù)繪制的3D雙柱狀圖的相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
jQuery Ajax 全局調(diào)用封裝實(shí)例代碼詳解
這篇文章主要介紹了jQuery Ajax 全局調(diào)用封裝實(shí)例代碼詳解的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06

