亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用jQuery制作基礎的Web圖片輪播效果

2019-11-20 10:13:48
字體:
來源:轉載
供稿:網友

首先看一下效果:

2016422151213221.jpg (651×415)

就這么個意思,沒截動圖哈~

輪播效果分析:
輪播效果大致可以分為3個部分:輪播圖片(圖片或者是包含容器),控制輪播圖顯示的按鈕(向左、向右按鈕,索引按鈕(例如上面效果圖的頂部的數字按鈕)),每隔一段時間輪流顯示輪播圖片。
輪播圖的顯示:要顯示的輪播圖顯示,不需要顯示的輪播圖隱藏;通常將這些輪播圖片以定位的方式重疊在一起,每次顯示一張輪播圖片。
控制按鈕:鼠標點擊或者移到索引按鈕上面時,顯示對應索引位置的輪播圖;向上、向下按鈕負責控制顯示上一張、下一張輪播圖片。
其它:一般索引按鈕有激活狀態和未激活狀態共2種狀態;鼠標移到輪播圖片上面時應該停止自動輪播,鼠標離開時開始自動輪播。

輪播效果實現筆記:
jquery提供了豐富的選擇器以及用來挑選元素的方法,這極大的簡化了我們的開發,例如$(".slider-item").filter(".slider-item-selected")選擇了當前處于激活狀態的索引按鈕。
兩張輪播圖的切換顯示效果是通過jquery的fadeOut()和fadeIn()方法來實現的,具體的使用參照jquery的api;
CSS透明背景的實現:  background: rgba(0, 0, 0, 0.2);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000); (可以參看下面的參看資料),兼容大部分主流瀏覽器包括IE;為什么不使用opacity呢?因為opacity會使文字也透明(子元素也會透明)。
HTML骨架很重要,你寫的html的結果應該是良好的。

代碼部分:

HTML:

<pre name="code" class="html"><div class="slider"> <div class="slider-extra"> <ul class="slider-nav">  <li class="slider-item">1</li>  <li class="slider-item">2</li>  <li class="slider-item">3</li>  <li class="slider-item">4</li> </ul> <div class="slider-page">  <a class="slider-pre" href="javascript:;;"><</a>  <a class="slider-next" href="javascript:;;">></a> </div> </div></div>

CSS:

* { padding: 0px; margin: 0px;}a { text-decoration: none;}ul { list-style: outside none none;}.slider, .slider-panel img, .slider-extra { width: 650px; height: 413px;}.slider { text-align: center; margin: 30px auto; position: relative;}.slider-panel, .slider-nav, .slider-pre, .slider-next { position: absolute; z-index: 8;}.slider-panel { position: absolute;}.slider-panel img { border: none;}.slider-extra { position: relative;}.slider-nav { margin-left: -51px; position: absolute; left: 50%; bottom: 4px;}.slider-nav li { background: #3e3e3e; border-radius: 50%; color: #fff; cursor: pointer; margin: 0 2px; overflow: hidden; text-align: center; display: inline-block; height: 18px; line-height: 18px; width: 18px;}.slider-nav .slider-item-selected { background: blue;}.slider-page a{ background: rgba(0, 0, 0, 0.2); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000); color: #fff; text-align: center; display: block; font-family: "simsun"; font-size: 22px; width: 28px; height: 62px; line-height: 62px; margin-top: -31px; position: absolute; top: 50%;}.slider-page a:HOVER { background: rgba(0, 0, 0, 0.4); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000);}.slider-next { left: 100%; margin-left: -28px;}

JavaScript:

$(document).ready(function() { var length, currentIndex = 0, interval, hasStarted = false, //是否已經開始輪播 t = 3000; //輪播時間間隔 length = $('.slider-panel').length;  //將除了第一張圖片隱藏 $('.slider-panel:not(:first)').hide(); //將第一個slider-item設為激活狀態 $('.slider-item:first').addClass('slider-item-selected'); //隱藏向前、向后翻按鈕 $('.slider-page').hide();  //鼠標上懸時顯示向前、向后翻按鈕,停止滑動,鼠標離開時隱藏向前、向后翻按鈕,開始滑動 $('.slider-panel, .slider-pre, .slider-next').hover(function() { stop(); $('.slider-page').show(); }, function() { $('.slider-page').hide(); start(); });  $('.slider-item').hover(function(e) { stop(); var preIndex = $(".slider-item").filter(".slider-item-selected").index(); currentIndex = $(this).index(); play(preIndex, currentIndex); }, function() { start(); });  $('.slider-pre').unbind('click'); $('.slider-pre').bind('click', function() { pre(); }); $('.slider-next').unbind('click'); $('.slider-next').bind('click', function() { next(); });  /** * 向前翻頁 */ function pre() { var preIndex = currentIndex; currentIndex = (--currentIndex + length) % length; play(preIndex, currentIndex); } /** * 向后翻頁 */ function next() { var preIndex = currentIndex; currentIndex = ++currentIndex % length; play(preIndex, currentIndex); } /** * 從preIndex頁翻到currentIndex頁 * preIndex 整數,翻頁的起始頁 * currentIndex 整數,翻到的那頁 */ function play(preIndex, currentIndex) { $('.slider-panel').eq(preIndex).fadeOut(500)  .parent().children().eq(currentIndex).fadeIn(1000); $('.slider-item').removeClass('slider-item-selected'); $('.slider-item').eq(currentIndex).addClass('slider-item-selected'); }  /** * 開始輪播 */ function start() { if(!hasStarted) {  hasStarted = true;  interval = setInterval(next, t); } } /** * 停止輪播 */ function stop() { clearInterval(interval); hasStarted = false; }  //開始輪播 start();});

首先是初始化部分:將除了第一張輪播圖片意外的圖片都隱藏,并且隱藏向前、向后按鈕,使第一個索引按鈕處于激活狀態。
事件部分:通過jquery的hover()綁定鼠標上懸以及離開時的事件處理, jquery的bind()方法綁定鼠標點擊事件處理向前、向后翻動、
輪播控制:pre(), next(), play(), start()開始自動輪播,stop()停止自動輪播。
上面的js寫的比較散,結構也不太好,讀起來也比較費力,也不易使用,耦合度較高。下篇將給出一個純粹的jquery輪播插件, 該插件可以定制各種效果,方便的配置以及可擴展。

下面是整體的代碼:
index.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>jquery輪播效果圖 - by RiccioZhang</title><script type="text/javascript" src="scripts/jquery-1.9.1.js"></script><style type="text/css"> * { padding: 0px; margin: 0px; } a { text-decoration: none; } ul { list-style: outside none none; } .slider, .slider-panel img, .slider-extra { width: 650px; height: 413px; } .slider { text-align: center; margin: 30px auto; position: relative; } .slider-panel, .slider-nav, .slider-pre, .slider-next { position: absolute; z-index: 8; } .slider-panel { position: absolute; } .slider-panel img { border: none; } .slider-extra { position: relative; } .slider-nav { margin-left: -51px; position: absolute; left: 50%; bottom: 4px; } .slider-nav li { background: #3e3e3e; border-radius: 50%; color: #fff; cursor: pointer; margin: 0 2px; overflow: hidden; text-align: center; display: inline-block; height: 18px; line-height: 18px; width: 18px; } .slider-nav .slider-item-selected { background: blue; } .slider-page a{ background: rgba(0, 0, 0, 0.2); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000); color: #fff; text-align: center; display: block; font-family: "simsun"; font-size: 22px; width: 28px; height: 62px; line-height: 62px; margin-top: -31px; position: absolute; top: 50%; } .slider-page a:HOVER { background: rgba(0, 0, 0, 0.4); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000); } .slider-next { left: 100%; margin-left: -28px; }</style><script type="text/javascript"> $(document).ready(function() { var length,  currentIndex = 0,  interval,  hasStarted = false, //是否已經開始輪播  t = 3000; //輪播時間間隔 length = $('.slider-panel').length;  //將除了第一張圖片隱藏 $('.slider-panel:not(:first)').hide(); //將第一個slider-item設為激活狀態 $('.slider-item:first').addClass('slider-item-selected'); //隱藏向前、向后翻按鈕 $('.slider-page').hide();  //鼠標上懸時顯示向前、向后翻按鈕,停止滑動,鼠標離開時隱藏向前、向后翻按鈕,開始滑動 $('.slider-panel, .slider-pre, .slider-next').hover(function() {  stop();  $('.slider-page').show(); }, function() {  $('.slider-page').hide();  start(); });  $('.slider-item').hover(function(e) {  stop();  var preIndex = $(".slider-item").filter(".slider-item-selected").index();  currentIndex = $(this).index();  play(preIndex, currentIndex); }, function() {  start(); });  $('.slider-pre').unbind('click'); $('.slider-pre').bind('click', function() {  pre(); }); $('.slider-next').unbind('click'); $('.slider-next').bind('click', function() {  next(); });  /**  * 向前翻頁  */ function pre() {  var preIndex = currentIndex;  currentIndex = (--currentIndex + length) % length;  play(preIndex, currentIndex); } /**  * 向后翻頁  */ function next() {  var preIndex = currentIndex;  currentIndex = ++currentIndex % length;  play(preIndex, currentIndex); } /**  * 從preIndex頁翻到currentIndex頁  * preIndex 整數,翻頁的起始頁  * currentIndex 整數,翻到的那頁  */ function play(preIndex, currentIndex) {  $('.slider-panel').eq(preIndex).fadeOut(500)  .parent().children().eq(currentIndex).fadeIn(1000);  $('.slider-item').removeClass('slider-item-selected');  $('.slider-item').eq(currentIndex).addClass('slider-item-selected'); }  /**  * 開始輪播  */ function start() {  if(!hasStarted) {  hasStarted = true;  interval = setInterval(next, t);  } } /**  * 停止輪播  */ function stop() {  clearInterval(interval);  hasStarted = false; }  //開始輪播 start(); });</script></head><body> <div class="slider"> <div class="slider-extra">  <ul class="slider-nav">  <li class="slider-item">1</li>  <li class="slider-item">2</li>  <li class="slider-item">3</li>  <li class="slider-item">4</li>  </ul>  <div class="slider-page">  <a class="slider-pre" href="javascript:;;"><</a>  <a class="slider-next" href="javascript:;;">></a>  </div> </div> </div></body></html>

至此一個簡單的jquery輪播效果就完成了,當然還有很多需要改進的地方。

使用插件實現
上面的效果看起來還令人滿意,唯一不足的就是:每次需要輪播效果時,要將代碼復制粘貼過去,如果有些部分需要修改(例如:輪播時的動畫效果,前一篇使用的是jquery的淡入淡出效果,如果改成滑動效果,不可避免的要修改js代碼),那么就需要對js代碼進行修改,對我所寫的jquery輪播效果的js代碼不熟悉的程序員來說,修改這些js確實很困難。輪播插件所要實現的目標之一就是插件可以靈活配置(不光只是本篇文章的插件),程序員只需要寫少量的代碼就可以實現豐富的功能,這當然是一件很好的事情。本篇文章的輪播插件的html和css部分需要程序員自己編寫,而實現效果的js只需要少量的編寫。
這里我們使用到的zslider插件在GitHub上開源:
github:https://github.com/ricciozhang/zslider_v1
嗯,我們來看代碼:

(function($, window, document) {   //---- Statics   var DEFAULT_ANIMATE_TYPE = 'fade',      ARRAY_SLICE = [].slice,     ARRAY_CONCAT = [].concat     ;      //---- Methods   function concatArray() {     var deep = false,       result = [];     if(arguments.length > 0 &&          arguments[arguments.length - 1] === true) {       deep = true;     }     for(var i = 0; i < arguments.length; i++) {       if(!!arguments[i].length) {         if(deep) {           for(var j = 0; j < arguments[i].length; j++) {             //recursive call             result = ARRAY_CONCAT.call(result,                  concatArray(arguments[i][j], true));           }         } else {           result = ARRAY_CONCAT.call(result, arguments[i]);         }       } else if(i != arguments.length - 1 ||            (arguments[arguments.length - 1] !== true &&               arguments[arguments.length - 1] !== false)) {         result.push(arguments[i]);       }     }     return result;   }    //----- Core   $.fn.extend({     zslider: function(zsliderSetting, autoStart) {       var itemLenght = 0,         currItemIndex = 0,         started = false,         oInterval = {},         setting = {           intervalTime: 3000,           step: 1,           imagePanels: $(),           animateConfig: {             atype: 'fade',             fadeInSpeed: 500,             fadeOutSpeed: 1000           },           panelHoverStop: true,           ctrlItems: $(),           ctrlItemActivateType: 'hover' || 'click',           ctrlItemHoverCls: '',           flipBtn: {},           panelHoverShowFlipBtn: true,           callbacks: {             animate: null           }         },         that = this         ;              //core methods       var slider = {           pre: function() {             var toIndex = itemLenght +                (currItemIndex - setting.step) % itemLenght;             slider.to(toIndex);           },           next: function() {             var toIndex = (currItemIndex + setting.step) % itemLenght;             slider.to(toIndex);           },           to: function(toIndex) {             //handle the index value             if(typeof toIndex === 'function') {               toIndex = toIndex.call(that, concatArray(setting.imagePanels, true),                      concatArray(setting.ctrlItems, true),                       currItemIndex, step);             }             if(window.isNaN(toIndex)) {               toIndex = 0;             }             toIndex = Math.round(+toIndex) % itemLenght;             if(toIndex < 0) {               toIndex = itemLenght + toIndex;             }                          var currentPanel = setting.imagePanels.eq(currItemIndex),             toPanel = setting.imagePanels.eq(toIndex),             currrntCtrlItem = setting.ctrlItems.eq(currItemIndex)             toCtrlItem = setting.ctrlItems.eq(toIndex)             ;             if(!setting.callbacks.animate ||                  setting.callbacks.animate.call(that,                      concatArray(setting.imagePanels, true),                        concatArray(setting.ctrlItems, true),                         currItemIndex, toIndex) === true) {               currrntCtrlItem.removeClass(setting.ctrlItemHoverCls);               toCtrlItem.addClass(setting.ctrlItemHoverCls);                              toPanel.fadeIn(setting.animateConfig.fadeInSpeed);               currentPanel.fadeOut(setting.animateConfig.fadeOutSpeed);             }                          //set the current item index             currItemIndex = toIndex;           },           start: function() {             if(!started) {               started = true;               oInterval =                  window.setInterval(slider.next, setting.intervalTime);             }           },           stop: function() {             if(started) {               started = false;               window.clearInterval(oInterval);             }           },           isStarted: function() {             return started;           }       };       function initData() {         if(zsliderSetting) {           var temp_callbacks = zsliderSetting.callbacks;                      $.extend(setting, zsliderSetting);           $.extend(setting.callbacks, temp_callbacks);                      itemLenght = setting.imagePanels.length;         }         //convert to the jquery object         setting.imagePanels = $(setting.imagePanels);         setting.ctrlItems = $(setting.ctrlItems);         setting.flipBtn.container = $(setting.flipBtn.container);         setting.flipBtn.preBtn = $(setting.flipBtn.preBtn);         setting.flipBtn.nextBtn = $(setting.flipBtn.nextBtn);       }       function initLook() {         //show the first image panel and hide other         setting.imagePanels.hide();         setting.imagePanels.filter(':first').show();         //activate the first control item and deactivate other         setting.ctrlItems.removeClass(setting.ctrlItemHoverCls);         setting.ctrlItems.filter(':first').addClass(setting.ctrlItemHoverCls);         $(that).css('overflow', 'hidden');         if(setting.panelHoverShowFlipBtn) {           showFlipBtn(false);         }       }       function initEvent() {         $(concatArray(setting.imagePanels,              setting.flipBtn.preBtn, setting.flipBtn.nextBtn, true)).hover(function() {           if(setting.panelHoverStop) {             slider.stop();           }           if(setting.panelHoverShowFlipBtn) {             showFlipBtn(true);           }         }, function() {           slider.start();           if(setting.panelHoverShowFlipBtn) {             showFlipBtn(false);           }         });         if(setting.ctrlItemActivateType === 'click') {           setting.ctrlItems.unbind('click');           setting.ctrlItems.bind('click', function() {             slider.to($(this).index());           });         } else {           setting.ctrlItems.hover(function() {             slider.stop();             slider.to($(this).index());           }, function() {             slider.start();           });         }         setting.flipBtn.preBtn.unbind('click');         setting.flipBtn.preBtn.bind('click', function() {           slider.pre();         });         setting.flipBtn.nextBtn.unbind('click');         setting.flipBtn.nextBtn.bind('click', function() {           slider.next();         });       }       function init() {         initData();                  initLook();                  initEvent();       }              function showFlipBtn(show) {         var hasContainer = setting.flipBtn.container.length > 0,           eles;         eles = hasContainer ? setting.flipBtn.container :           //to the dom array:           /*ARRAY_CONCAT.call(ARRAY_SLICE.apply(setting.flipBtn.preBtn),               ARRAY_SLICE.apply(setting.flipBtn.nextBtn));*/           concatArray(setting.flipBtn.preBtn,                    setting.flipBtn.nextBtn, true);         if(show) {           $(eles).show();         } else {           $(eles).hide();         }       }              init();       if(arguments.length < 2 || !!autoStart){         slider.start();       }       return slider;     }   }); })(jQuery, window, document); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产精品亚洲| 黄网站色欧美视频| 欧美主播福利视频| 国产精品www色诱视频| 亚洲精品国产精品乱码不99按摩| 色中色综合影院手机版在线观看| 日韩免费观看av| 国产精品爱啪在线线免费观看| 亚洲综合第一页| 欧美韩国理论所午夜片917电影| 欧美大片免费观看| 亚洲精品一区二区久| 成人有码视频在线播放| 久久99热这里只有精品国产| 欧美成人中文字幕| 色婷婷av一区二区三区在线观看| 国产日韩精品在线观看| 亚洲一区二区久久久| 国产精品精品久久久久久| 欧美性猛交xxxx乱大交3| 亚洲性视频网址| 亚洲天堂成人在线视频| 精品久久久久久| 中文字幕久久久av一区| 成人免费福利视频| 亚洲精品综合久久中文字幕| 国产精品视频一区二区三区四| 欧美日韩精品国产| 色妞色视频一区二区三区四区| 日韩精品欧美国产精品忘忧草| 性欧美在线看片a免费观看| 中文字幕亚洲欧美日韩高清| 国产精品精品国产| 在线日韩欧美视频| 91国产精品视频在线| 97精品一区二区三区| 国产91在线播放精品91| 国产精品久久久久影院日本| 久久久久久免费精品| 在线视频欧美日韩精品| 国产自产女人91一区在线观看| 亚洲v日韩v综合v精品v| 欧美性理论片在线观看片免费| 97婷婷大伊香蕉精品视频| 97精品国产97久久久久久免费| 裸体女人亚洲精品一区| 亚洲精品久久久一区二区三区| 亚洲成人黄色在线观看| 欧美成人午夜激情视频| 在线激情影院一区| 亚洲精品视频在线观看视频| 亚洲天堂免费观看| 亚洲理论片在线观看| 亚洲欧美日韩天堂| 国产成人自拍视频在线观看| 亚洲国产精品美女| 欧美日韩免费在线| 亚洲第一视频网| 国内精品小视频在线观看| 日韩精品视频免费| 国产日韩精品综合网站| 中文字幕日韩视频| 精品国产一区二区三区四区在线观看| 国产精品久久久久久久午夜| 欧美亚洲免费电影| 日韩高清av在线| 4k岛国日韩精品**专区| 欧美精品18videos性欧| 久久精品影视伊人网| 伊人久久男人天堂| 国产精品久久9| 97精品国产97久久久久久| 成人日韩av在线| 激情亚洲一区二区三区四区| 欧美性极品少妇精品网站| 91精品久久久久久久久不口人| 日韩精品在线免费| 国产欧美日韩最新| 国产精品久久9| 亚洲精品国精品久久99热一| 日韩精品视频免费专区在线播放| 国产精品狼人色视频一区| 亚洲色图校园春色| 欧美日韩视频在线| 日韩免费视频在线观看| 一区二区三区视频免费在线观看| 韩国精品美女www爽爽爽视频| 国产一区二区动漫| 日韩av免费在线观看| 国产日韩精品综合网站| 精品国产老师黑色丝袜高跟鞋| 伊人av综合网| 日韩美女视频在线观看| 欧美又大又硬又粗bbbbb| 午夜精品在线视频| 国产日韩欧美91| 欧美日韩一区免费| 91色p视频在线| 亚洲美女av网站| 亚洲石原莉奈一区二区在线观看| 精品偷拍一区二区三区在线看| 欧美激情在线观看视频| 懂色aⅴ精品一区二区三区蜜月| 日韩中文字幕免费| 久久久人成影片一区二区三区| 久久免费精品视频| 国产做受69高潮| 欧美影院久久久| 亚洲va电影大全| 韩日精品中文字幕| 在线电影中文日韩| 亚洲日韩中文字幕在线播放| 中文字幕日韩在线观看| 国产在线精品一区免费香蕉| 欧美国产乱视频| 日韩有码在线播放| 亚洲国产成人久久综合| 色综久久综合桃花网| 欧洲午夜精品久久久| 国产精品96久久久久久又黄又硬| 亚洲人永久免费| 中文在线资源观看视频网站免费不卡| 国产精品第三页| 日韩精品久久久久| 国产性猛交xxxx免费看久久| 亚洲精品动漫久久久久| 日韩欧美综合在线视频| 久久伊人精品天天| 国产91av在线| 亚洲综合第一页| 欧美疯狂xxxx大交乱88av| 精品久久久久国产| 日韩免费观看av| 欧美大片在线影院| 成人网在线观看| 国产精品人成电影在线观看| 亚洲欧美激情在线视频| 欧美激情性做爰免费视频| 成人看片人aa| 欧美孕妇毛茸茸xxxx| 国产成人涩涩涩视频在线观看| 91精品国产高清自在线| 色午夜这里只有精品| 高清欧美性猛交xxxx| 国产精品自拍小视频| 中文字幕欧美视频在线| 日韩欧美国产黄色| 国产香蕉精品视频一区二区三区| 日本伊人精品一区二区三区介绍| 日韩av成人在线| 欧美成人合集magnet| 国产亚洲美女久久| 日韩免费精品视频| 亚洲美女av黄| 精品久久久久久久久久| 亚洲精品自拍第一页| 中文字幕一精品亚洲无线一区| 国产丝袜一区二区三区| 日韩欧美国产视频| 91在线观看免费观看| 亚洲国产高清高潮精品美女| 宅男66日本亚洲欧美视频| 久久精品99久久久香蕉| 国内精品国产三级国产在线专|