jQuery焦點圖切換簡易插件制作過程全紀錄
首頁經(jīng)常是需要一個焦點圖切換的效果,最近做的項目也正好需要,所以在網(wǎng)上搜索,后面查到了一個半成品的插件,這里我自己修改了一下。
js文件夾下面有兩個文件夾jquery.jslide.js與jquery.jslides.js,前面一個是我改寫的,第二個是原作者的文件。下圖是效果圖:

一、靜態(tài)效果
<div class="slide_wrap">
<ul id="slides2" class="slide">
<li style="background:url('images/01.jpg') no-repeat center top"><a href="http://www.dbjr.com.cn/" target="_blank">pwstrick1</a></li>
<li style="background:url('images/02.jpg') no-repeat center top"><a href="http://www.dbjr.com.cn/" target="_blank">pwstrick2</a></li>
<li style="background:url('images/03.jpg') no-repeat center top"><a href="http://www.dbjr.com.cn/" target="_blank">pwstrick3</a></li>
<li style="background:url('images/04.jpg') no-repeat center top"><a href="http://www.dbjr.com.cn/" target="_blank">pwstrick4</a></li>
</ul>
</div>
2.最外面套個slide_wrap用來做限制里面圖片的絕對定位
3.ul中的class原先我是在插件初始化的時候添加上去的,現(xiàn)在我預先就加上了,顯示效果比后面添加要好一點,大家可以在改寫插件的時候做修改
.slide_wrap {width:100%;height:400px;position:relative}
.slide_wrap .slide { display:block; width:100%; height:400px; list-style:none; padding:0; margin:0; position:relative;}
.slide_wrap .slide li { display:block; width:100%; height:100%; list-style:none; padding:0; margin:0; position:absolute;}
.slide_wrap .slide li a { display:block; width:100%; height:100%; text-indent:-9999px;}
.slide_wrap .pagination { display:block; list-style:none; position:absolute; left:50%; top:340px; z-index:9900;padding:5px 15px 5px 0; margin:0}
.slide_wrap .pagination li { display:block; list-style:none; width:10px; height:10px; float:left;margin-left:15px; border-radius:5px; background:#FFF }
.slide_wrap .pagination li a { display:block; width:100%; height:100%; padding:0; margin:0; text-indent:-9999px;outline:0}
.slide_wrap .pagination li.current { background:#0092CE}
1、slide_wrap與slide中的height屬性可以根據(jù)實際情況修改
2、pagination是圖中的按鈕樣式,用來控制顯示第幾張圖,也是絕對定位left與top可以根據(jù)實際情況修改
3、樣式中的各個顏色也可以根據(jù)想要的效果做個性化修改
4、上面的樣式寫的有點啰嗦,在嵌入自己的項目中,可以適當精簡
二、調(diào)用方式
<script type="text/javascript">
$('#slides2').jslide();
</script>
1、將ul設(shè)置成焦點圖插件
2、下面的各個操作都將圍繞著ul轉(zhuǎn)
三、jQuery插件通用格式
;(function (factory) {
'use strict';
// Register as an AMD module, compatible with script loaders like RequireJS.
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
}
else {
factory(jQuery);
}
}(function ($, undefined) {
'use strict';
//中間插件代碼
$.fn.jslide = function (method) {
return _init.apply(this, arguments);
};
}));
1、第一個分號是為了防止在與其他代碼壓縮到一起的時候合在一行中,這樣會出現(xiàn)語法錯誤。例如var i=0(function(factory){......}(..);
2、'use strict'是開啟嚴格模式,使Javascript解釋器可以用"嚴格"的語法來解析代碼,以幫助開發(fā)人員發(fā)現(xiàn)錯誤
3、如果使用了requirejs模塊載入框架,define(['jquery'], factory)這句就是讓插件支持AMD規(guī)范
4、function ($, undefined) 這里面的undefined是為了防止在引入其他js文件的時候,使用被重寫了的undefined
5、_init是用于初始化效果
四、插件初始化
var defaults = {
speed : 3000,
pageCss : 'pagination',
auto: true //自動切換
};
var nowImage = 0;//現(xiàn)在是哪張圖片
var pause = false;//暫停
var autoMethod;
/**
* @method private
* @name _init
* @description Initializes plugin
* @param opts [object] "Initialization options"
*/
function _init(opts) {
opts = $.extend({}, defaults, opts || {});
// Apply to each element
var $items = $(this);
for (var i = 0, count = $items.length; i < count; i++) {
_build($items.eq(i), opts);
}
return $items;
}
1、defaults是暴露出來的自定義參數(shù),這里我就寫了三個自動切換的速度、選擇按鈕樣式、是否自動化
2、三個全局參數(shù),nowImage是當前顯示圖片的序號、pause是控制圖片是切換還是暫停,autoMethod是定時函數(shù)的編號
3、_init中有合并自定義參數(shù),調(diào)用_build做創(chuàng)建操作
五、創(chuàng)建插件各個操作
/**
* @method private
* @name _getSlides
* @description 獲取幻燈片對象
* @param $node [jQuery object] "目標對象"
*/
function _getSlides($node) {
return $node.children('li');
}
/**
* @method private
* @name _build
* @description Builds each instance
* @param $node [jQuery object] "目標對象"
* @param opts [object] "插件參數(shù)"
*/
function _build($node, opts) {
var $slides = _getSlides($node);
$slides.eq(0).siblings('li').css({'display':'none'});
var numpic = $slides.size() - 1;
$node.delegate('li', 'mouseenter', function() {
pause = true;//暫停輪播
clearInterval(autoMethod);
}).delegate('li', 'mouseleave', function() {
pause = false;
autoMethod = setInterval(function() {
_auto($slides, $pages, opts);
}, opts.speed);
});
//console.log(autoMethod)
var $pages = _pagination($node, opts, numpic);
if(opts.auto) {
autoMethod = setInterval(function() {
_auto($slides, $pages, opts);
}, opts.speed);
}
}
1、_getSlides用于獲取ul這個對象的li子標簽,ul也就是這個焦點圖插件
2、將除了第一個li標簽,其他標簽設(shè)置為隱藏
3、獲取切換圖片的數(shù)量,由于后面做循環(huán)是從下標0開始,做<=操作,所以減去一個1,其實這里不減也是可以的,看個人喜好
4、給li標簽設(shè)置mouseenter與mouseleave的事件,分別是取消循環(huán)與繼續(xù)循環(huán)
5、初始化選擇按鈕
6、參數(shù)auto如果為true,就激活自動切換
六、初始化選擇按鈕
/**
* @method private
* @name _pagination
* @description 初始化選擇按鈕
* @param $node [jQuery object] "目標對象"
* @param opts [Object] "參數(shù)"
* @param size [int] "圖片數(shù)量"
*/
function _pagination($node, opts, size) {
var $ul = $('<ul>', {'class': opts.pageCss});
for(var i = 0; i <= size; i++){
$ul.append('<li>' + '<a href="javascript:void(0)">' + (i+1) + '</a>' + '</li>');
}
$ul.children(':first').addClass('current');//給第一個按鈕選中樣式
var $pages = $ul.children('li');
$ul.delegate('li', 'click', function() {//綁定click事件
var changenow = $(this).index();
_changePage($pages, $node, changenow);
}).delegate('li', 'mouseenter', function() {
pause = true;//暫停輪播
}).delegate('li', 'mouseleave', function() {
pause = false;
});
$node.after($ul);
return $pages;
}
1、動態(tài)添加按鈕ul標簽,賦上一個自定義class,將子標簽li加上
2、將第一個按鈕加上選中樣式
3、給li標簽加上click、mouseenter與mouseleave的事件,click事件綁定切換操作
4、把分頁按鈕放到插件對象ul的后面
5、返回分頁按鈕中的li對象,后面有用的
七、切換圖片
/**
* @method private
* @name _change
* @description 幻燈片顯示與影藏
* @param $slides [jQuery object] "圖片對象"
* @param $pages [jQuery object] "按鈕對象"
* @param next [int] "要顯示的下一個序號"
*/
function _fadeinout($slides, $pages, next){
$slides.eq(nowImage).css('z-index','2');
$slides.eq(next).css({'z-index':'1'}).show();
$pages.eq(next).addClass('current').siblings().removeClass('current');
$slides.eq(nowImage).fadeOut(400, function(){
$slides.eq(next).fadeIn(500);
});
}
1、將當前的圖片z-index加大,下一張圖片的z-index也加大,顯示下一張圖,這樣能做出一種漸變的效果,不加的話就會是很生硬的切換
2、選擇按鈕的下一個增加選中樣式
3、應用jQuery的fadeOut與fadeIn做隱藏與顯示的漸變特效
八、自動循環(huán)
/**
* @method private
* @name _auto
* @description 自動輪播
* @param $slides [jQuery object] "圖片對象"
* @param $pages [jQuery object] "按鈕對象"
* @param opts [Object] "參數(shù)"
*/
function _auto($slides, $pages, opts){
var next = nowImage + 1;
var size = $slides.size() - 1;
if(!pause) {
if(nowImage >= size){
next = 0;
}
_fadeinout($slides, $pages, next);
if(nowImage < size){
nowImage += 1;
}else {
nowImage = 0;
}
}else {
clearInterval(autoMethod);//暫停的時候就取消自動切換
}
}
1、判斷是暫停還是繼續(xù)輪播
2、如果不是暫停,就根據(jù)條件做當前頁與下一個按鈕的序號設(shè)置
插件還有很多問題,比如不能在一個頁面綁定兩個不同的對象,還有巨大的修改空間。
通過這次的修改,自己有了一個可以控制的焦點圖切換插件,雖然還有很多問題但可以一步一步解決。以后嵌入到自己的項目中,修改起來也方便很多。
demo:http://demo.jb51.net/js/2014/jsilde/
下載: http://www.dbjr.com.cn/jiaoben/210405.html
- 基于JQuery的實現(xiàn)圖片輪播效果(焦點圖)
- jquery仿QQ商城帶左右按鈕控制焦點圖片切換滾動效果
- jquery焦點圖片切換(數(shù)字標注/手動/自動播放/橫向滾動)
- jQuery焦點圖切換特效插件封裝實例
- jquery左右滾動焦點圖banner圖片鼠標經(jīng)過顯示上下頁按鈕
- Jquery焦點圖實例代碼
- Jquery 焦點圖 用于圖片展示效果代碼
- jQuery插件實現(xiàn)帶圓點的焦點圖片輪播切換
- jQuery插件Elastislide實現(xiàn)響應式的焦點圖無縫滾動切換特效
- jquery picswitch圖片焦點圖展示效果
- jQuery插件bxSlider實現(xiàn)響應式焦點圖
- jQuery實現(xiàn)的自適應焦點圖效果完整實例
相關(guān)文章
使用jQuery UI庫開發(fā)Web界面的簡單入門指引
這篇文章主要介紹了使用jQuery UI庫開發(fā)Web界面的簡單入門指引,jQuery UI是一個基于jQuery的圖形組件庫,需要的朋友可以參考下2016-04-04
EasyUI Combobox設(shè)置默認值 獲取text的方法
這篇文章主要介紹了EasyUI Combobox設(shè)置默認值 獲取text的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11
在IE 瀏覽器中使用 jquery的fadeIn() 效果 英文字符字體加粗
在IE 瀏覽器中使用 jquery的fadeIn() 效果 英文字符字體加粗的解決方法分享。2011-06-06
JS實現(xiàn)復制內(nèi)容到剪貼板功能兼容所有瀏覽器(推薦)
這篇文章主要介紹了JS實現(xiàn)復制內(nèi)容到剪貼板功能兼容所有瀏覽器(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06
jquery實現(xiàn)的超出屏幕時把固定層變?yōu)槎ㄎ粚拥拇a
相信很多人都上過taobao吧,在taobao的產(chǎn)品列表頁有一個浮動的用來排序的浮動層,當你拖動滾動條而導致那個排序欄看不到的時候它會自動變?yōu)楦訉?,一直固定在那里?/div> 2010-02-02
jQuery插件FusionCharts實現(xiàn)的2D柱狀圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件FusionCharts實現(xiàn)的2D柱狀圖效果,結(jié)合完整實例形式分析了FusionCharts插件繪制2D柱狀圖的實現(xiàn)步驟與相關(guān)屬性設(shè)置技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03最新評論

