基于jQuery和hwSlider實(shí)現(xiàn)內(nèi)容左右滑動(dòng)切換效果附源碼下載(一)
內(nèi)容滑動(dòng)切換應(yīng)用非常廣,常見(jiàn)的有幻燈片焦點(diǎn)圖、畫廊切換等。隨著WEB前端技術(shù)的廣泛應(yīng)用,內(nèi)容滑動(dòng)切換效果占據(jù)著web頁(yè)面重要地位,因此本站Helloweba特別給廣大前端愛(ài)好者安排了淺顯易懂的內(nèi)容滑動(dòng)切換效果的開(kāi)發(fā)教程。
先給大家展示下效果圖,感覺(jué)還不錯(cuò)請(qǐng)參數(shù)實(shí)現(xiàn)代碼,具體效果如下所示:

本次教程分三個(gè)部分:
1、使用jQuery開(kāi)發(fā)基本的內(nèi)容滑動(dòng)切換效果,
2、支持移動(dòng)端觸控自適應(yīng)的內(nèi)容滑動(dòng)切換效果,
3、封裝內(nèi)容滑動(dòng)切換效果jQuery插件。
本文講解第一部分,后面兩部分會(huì)在接下來(lái)的文章中陸續(xù)發(fā)布,敬請(qǐng)關(guān)注。
本文將結(jié)合實(shí)例實(shí)現(xiàn)內(nèi)容滑動(dòng)切換的基本效果,包括:
左右箭頭切換
無(wú)限無(wú)縫滾動(dòng)
圓點(diǎn)按鈕切換
動(dòng)畫效果
自動(dòng)切換
HTML
首先準(zhǔn)備HTML結(jié)構(gòu),整個(gè)滑動(dòng)區(qū)域用#hwslider包裹,包括滑塊內(nèi)容,滑塊使用ul li組織內(nèi)容,滑塊內(nèi)容可以是圖片、文字等任意HTML內(nèi)容。#dots即圓點(diǎn)切換導(dǎo)航,由多個(gè)小圓點(diǎn)組成,對(duì)應(yīng)滑塊數(shù)量,一般位于滑動(dòng)區(qū)域的下方。.arr則是由兩個(gè)左右方向鍵組成。
<div id="hwslider"> <ul> <li class="active"><a href="#"><img src="images/s1.jpg" alt="1"></a></li> <li><a href="#"><img src="images/s2.jpg" alt="2"></a></li> <li>Helloweba</li> </ul> <div id="dots"> <span data-index="1" class="active"></span> <span data-index="2"></span> <span data-index="3"></span> </div> <a href="javascript:;" id="prev" class="arr"><</a> <a href="javascript:;" id="next" class="arr">></a> </div>
CSS
使用CSS完成滑動(dòng)區(qū)域各組件的布局,注意其中#hwslider需要設(shè)置position: relative以及寬度和高度,那么滑塊#hwslider ul li設(shè)置position:absolute,默認(rèn)只顯示.active的滑塊,超出尺寸部分將被隱藏。而圓點(diǎn)導(dǎo)航#dots和箭頭導(dǎo)航.arr都要設(shè)置position: absolute,箭頭導(dǎo)航默認(rèn)不顯示,當(dāng)鼠標(biāo)滑向滑塊區(qū)域時(shí)才顯示。再一個(gè)要注意的是#dots和.arr的z-index設(shè)置成2,即都應(yīng)該顯示在滑塊上面。您可以修改css樣式以滿足各種需求,請(qǐng)看以下代碼:
#hwslider{width: 600px;height: 320px;margin:40px auto; position: relative; overflow: hidden;}
#hwslider ul{width: 600px; height: 320px; position: absolute; z-index: 1}
#hwslider ul li{display:none;position:absolute; left:0; top:0; width: 600px;height: 320px; overflow: hidden;}
#hwslider ul li.active{display: block;}
#dots{position: absolute; bottom:20px; left:270px; width: 60px; height: 12px; z-index: 2;}
#dots span{float: left; width:12px;height: 12px; border: 1px solid #fff; border-radius: 50%; background: #333; margin-right: 8px; cursor: pointer;}
#dots span.active{background: orangered}
.arr{display:none;position: absolute; top: 140px; z-index: 2;width: 40px; height: 40px; line-height: 38px; text-align: center;; font-size: 36px; background: rgba(0,0,0,.3); color: #fff; text-decoration: none}
.arr:hover{background: rgba(0,0,0,.7); text-decoration: none;}
#hwslider:hover .arr{display: block; text-decoration: none;color: #fff}
#prev{left: 20px}
#next{right: 20px}
jQuery
我們使用jQuery來(lái)實(shí)現(xiàn)滑動(dòng)切換的各種效果,首先我們引入百度CDN提供的jQuery庫(kù)和hwslider.js。
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <script src="js/hwslider.js"></script>
接著我們?cè)趆wslider.js中預(yù)先定義變量參數(shù):
$(function(){
var slider = $("#hwslider");
var dots = $("#dots span"),
prev = $("#prev"),next = $("#next");
var sliderInder = slider.children('ul')
var hwsliderLi = sliderInder.children('li');
var hwsliderSize = hwsliderLi.length; //滑塊的總個(gè)數(shù)
var index = 1; //初始顯示第一個(gè)滑塊
var speed = 400; //滑動(dòng)速度
var interval = 3000; //間隔時(shí)間
var autoPlay = false; //是否支持自動(dòng)滑動(dòng)
var clickable = true; //是否已經(jīng)點(diǎn)擊了滑塊在做滑動(dòng)動(dòng)畫
});
以上定義了各種需要的變量,其中clickable用于限制點(diǎn)擊滑塊動(dòng)畫,因?yàn)榛瑝K滑動(dòng)過(guò)程需要時(shí)間完成,如果連續(xù)點(diǎn)擊箭頭的話,正常情況如果不限制點(diǎn)擊,則會(huì)在滑動(dòng)動(dòng)畫未完成的情況下又進(jìn)行下一個(gè)滑動(dòng)動(dòng)畫,這樣可能會(huì)導(dǎo)致頁(yè)面卡住的情況。
接下來(lái)我們來(lái)寫移動(dòng)動(dòng)畫函數(shù)moveTo()。接受兩個(gè)參數(shù),index即要滑動(dòng)的目標(biāo)滑塊,dir是滑動(dòng)方向,有next和prev。我們實(shí)現(xiàn)滑動(dòng)動(dòng)畫的原理是,當(dāng)前滑塊向左或向右移動(dòng)的距離剛好是滑塊的寬度,我們把這個(gè)寬度看作可視區(qū),滑動(dòng)時(shí),當(dāng)前滑塊會(huì)向左或向右移出可視區(qū),而緊接著下一個(gè)滑塊從左或從右側(cè)進(jìn)入可視區(qū)。我們使用jQuery的animate()方法實(shí)現(xiàn)動(dòng)畫效果,兩個(gè)滑塊的運(yùn)動(dòng)速度speed保持一致,就實(shí)現(xiàn)了無(wú)縫滾動(dòng)的效果。另外當(dāng)滑動(dòng)完成時(shí),及時(shí)變換圓點(diǎn)切換的樣式。
var moveTo = function(index,dir){
if(clickable){
clickable = false;
//位移距離
var offset = slider.width();
if(dir == 'prev'){
offset = -1*offset;
}
//當(dāng)前滑塊動(dòng)畫
sliderInder.children('.active').stop().animate({
left: -offset},
speed,
function() {
$(this).removeClass('active');
});
//下一個(gè)滑塊動(dòng)畫
hwsliderLi.eq(index-1).css('left', offset + 'px').addClass('active').stop().animate({
left: 0},
speed,
function(){
clickable = true;
});
dots.removeClass('active');
dots.eq(index-1).addClass('active');
}else{
return false;
}
}
綁定左右箭頭的點(diǎn)擊事件,當(dāng)點(diǎn)擊箭頭時(shí),判斷當(dāng)前滑塊是否是第一個(gè)滑塊或最后一個(gè)滑塊,并重新定義index,從而實(shí)現(xiàn)無(wú)線滾動(dòng)效果,然后分別調(diào)用moveTo()函數(shù),實(shí)現(xiàn)滑動(dòng)動(dòng)畫效果。
next.on('click', function(event) {
event.preventDefault();
if(clickable){
if(index >= hwsliderSize){
index = 1;
}else{
index += 1;
}
moveTo(index,'next');
}
});
prev.on('click', function(event) {
event.preventDefault();
if(clickable){
if(index == 1){
index = hwsliderSize;
}else{
index -= 1;
}
moveTo(index,'prev');
}
});
接著,綁定圓點(diǎn)導(dǎo)航的點(diǎn)擊事件,當(dāng)點(diǎn)擊小圓點(diǎn)時(shí),獲取當(dāng)前點(diǎn)擊的圓點(diǎn)序號(hào),即點(diǎn)擊的是第幾個(gè)圓點(diǎn),就對(duì)應(yīng)的第幾個(gè)滑塊,然后調(diào)用moveTo()完成切換動(dòng)畫。
dots.on('click', function(event) {
event.preventDefault();
if(clickable){
var dotIndex = $(this).data('index');
if(dotIndex > index){
dir = 'next';
}else{
dir = 'prev';
}
if(dotIndex != index){
index = dotIndex;
moveTo(index, dir);
}
}
});
自動(dòng)切換,首先我們要定義一個(gè)定時(shí)器,每隔一定的時(shí)間setInterval執(zhí)行play(),play()每執(zhí)行一次就會(huì)變化index參數(shù),調(diào)用moveTo實(shí)現(xiàn)切換效果。最后當(dāng)鼠標(biāo)滑上滑塊時(shí)清除定時(shí)器timer,鼠標(biāo)移開(kāi)滑塊時(shí)又重新啟動(dòng)定時(shí)器自動(dòng)切換。
if(autoPlay){
var timer;
var play = function(){
index++;
if(index > hwsliderSize){
index = 1;
}
moveTo(index, 'next');
}
timer = setInterval(play, interval); //設(shè)置定時(shí)器
//鼠標(biāo)滑上時(shí)暫停
slider.hover(function() {
timer = clearInterval(timer);
}, function() {
timer = setInterval(play, interval);
});
};
最后將代碼整理后,你將可以看到一個(gè)基本的滑動(dòng)切換效果,你也可以下載源碼測(cè)試。
為了讓我們的滑動(dòng)切換效果應(yīng)用到移動(dòng)端,我們?cè)谙乱黄恼轮袝?huì)具體介紹移動(dòng)端的自適應(yīng)屏幕以及手勢(shì)滑動(dòng)滑塊效果,敬請(qǐng)關(guān)注。
以上所述是小編給大家介紹的基于jQuery和hwSlider實(shí)現(xiàn)內(nèi)容左右滑動(dòng)切換效果附源碼下載(一)的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JS+CSS實(shí)現(xiàn)自動(dòng)切換的網(wǎng)頁(yè)滑動(dòng)門菜單效果代碼
- jQuery實(shí)現(xiàn)的Tab滑動(dòng)選項(xiàng)卡及圖片切換(多種效果)小結(jié)
- JS+CSS實(shí)現(xiàn)仿雅虎另類滑動(dòng)門切換效果
- JQuery實(shí)現(xiàn)簡(jiǎn)單的圖片滑動(dòng)切換特效
- 移動(dòng)手機(jī)APP手指滑動(dòng)切換圖片特效附源碼下載
- jQuery+CSS實(shí)現(xiàn)滑動(dòng)的標(biāo)簽分欄切換效果
- jQuery和hwSlider實(shí)現(xiàn)內(nèi)容響應(yīng)式可觸控滑動(dòng)切換效果附源碼下載(二)
相關(guān)文章
jQuery基礎(chǔ)知識(shí)filter()和find()實(shí)例說(shuō)明
這是jQuery里常用的2個(gè)方法。他們2者功能是完全不同的,而初學(xué)者往往會(huì)被誤導(dǎo)。2010-07-07
asp.net 30分鐘掌握無(wú)刷新 Repeater
經(jīng)過(guò)數(shù)個(gè)版本的迭代后, JQueryElement 3.3.0 版本中的 Repeater 基本上已經(jīng)完善, 這里將分功能的總結(jié)講解一下 Repeater 的使用方法.2011-09-09
使用Jquery搭建最佳用戶體驗(yàn)的登錄頁(yè)面之記住密碼自動(dòng)登錄功能(含后臺(tái)代碼)
今天將登錄功能徹底完成,加入記住密碼自動(dòng)登錄功能,密碼在客戶端進(jìn)行第一次加密存儲(chǔ)。并修改了一些bug,優(yōu)化js代碼,上一版本太亂了。2011-07-07
JQuery中綁定事件(bind())和移除事件(unbind())
本文主要向大家詳細(xì)介紹了jQuery的綁定事件和移除事件的使用方法和示例分享,這里推薦給有需要的小伙伴們參考下。2015-02-02
jQuery實(shí)現(xiàn)的自適應(yīng)焦點(diǎn)圖效果完整實(shí)例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的自適應(yīng)焦點(diǎn)圖效果,結(jié)合完整實(shí)例形式分析了jQuery事件響應(yīng)及動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-08-08
Enter回車切換輸入焦點(diǎn)實(shí)現(xiàn)思路與代碼兼容各大瀏覽器
這篇文章主要介紹了Enter回車切換輸入焦點(diǎn)實(shí)現(xiàn)思路與代碼并兼容各大瀏覽器,需要的朋友可以參考下2014-09-09

