ホームページにはフォーカス画像の切り替えエフェクトが必要になることが多く、最近のプロジェクトでも必要になったので、ネットで検索したところ、中途半端なプラグインを見つけて自分で修正しました。
js フォルダーの下に jquery.jslide.js と jquery.jslides.js の 2 つのフォルダーがあります。1 つ目は私が書き換えたもので、2 つ目はオリジナルの作成者のファイルです。下の図はレンダリングです:
1. 静的効果
<div class="slide_wrap"> <ul id="slides2" class="slide"> <li style="background:url('images/01.jpg') no-repeat center top"><a href="http://www.jb51.net/" target="_blank">pwstrick1</a></li> <li style="background:url('images/02.jpg') no-repeat center top"><a href="http://www.jb51.net/" target="_blank">pwstrick2</a></li> <li style="background:url('images/03.jpg') no-repeat center top"><a href="http://www.jb51.net/" target="_blank">pwstrick3</a></li> <li style="background:url('images/04.jpg') no-repeat center top"><a href="http://www.jb51.net/" target="_blank">pwstrick4</a></li> </ul> </div>
2. 最外側のサーフェスに slide_wrap を設定して、
内の画像の絶対位置を制限します。プラグインの初期化時に 3.ul にクラスを追加しましたが、後で追加するよりも表示効果が向上します。
.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 の高さ属性は、実際の状況に応じて変更できます
2. ページネーションは画像内のボタンのスタイルであり、実際の状況に応じて変更できる左と上の絶対位置を制御するために使用されます。
3. スタイルの各色は、希望の効果に応じてカスタマイズすることもできます4. 上記のスタイルは少し冗長ですが、独自のプロジェクトに埋め込む場合は適切に簡略化できます。
2. メソッドの呼び出し
<script type="text/javascript"> $('#slides2').jslide(); </script>
2. 以下の各操作は ul
を中心に展開します。3. 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); }; }));
2. 「use strict」は strict モードをオンにし、JavaScript インタープリタが「strict」構文を使用してコードを解析し、開発者がエラーを見つけられるようにします
3. requirejs モジュールを使用してフレームワークをロードする場合、define(['jquery'], Factory) はプラグインが AMD 仕様をサポートするようにします
4. 関数($, unfineed) ここでの未定義は、他のjsファイルを導入する際に書き換えられた未定義を使用しないようにするためのものです
5. _init は初期化効果に使用されます
4. プラグインの初期化
var defaults = { speed : 3000, pageCss : 'pagination', auto: true //自动切换 }; var nowImage = 0;//现在是哪张图片 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; }
3. カスタム パラメーターが _init にマージされ、_build が呼び出されてオペレーションが作成されます
5. プラグイン作成の各種操作
/** * @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] "插件参数" */ 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); } }
3. 後続のループは添え字 0 から始まり、1 が減算されます。実際には、個人の好みによって異なります。 🎜>
4. liタグにmouseenterイベントとmouseleaveイベントを設定します。これらはそれぞれループをキャンセルし、ループを継続します
5.初期化選択ボタン
6. パラメータ auto が true の場合、自動切り替えが有効になります
6.初期化選択ボタン
1. ボタン ul タグを動的に追加し、カスタム クラスを割り当て、サブタグ li
/** * @method private * @name _pagination * @description 初始化选择按钮 * @param $node [jQuery object] "目标对象" * @param opts [Object] "参数" * @param size [int] "图片数量" */ 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; }
3. click、mouseenter、mouseleave イベントを li タグに追加し、click イベントを切り替え操作にバインドします
4. ページング ボタンをプラグイン オブジェクト ul
の後ろに配置します。5. ページング ボタンの li オブジェクトに戻ります。これは後で役立ちます
7. 写真を切り替えます
1. 現在のピクチャの Z インデックスを増やし、次のピクチャを表示します。そうしないと、非常にわかりにくくなります。 🎜>
/** * @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); }); }
8. 自動サイクル
1. カルーセルを一時停止するか続行するかを決定します
/** * @method private * @name _auto * @description 自动轮播 * @param $slides [jQuery object] "图片对象" * @param $pages [jQuery object] "按钮对象" * @param opts [Object] "参数" */ 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);//暂停的时候就取消自动切换 } }
この修正により、制御可能なフォーカスマップ切り替えプラグインが完成しました。まだ多くの問題がありますが、段階的に解決できます。将来的には、それを自分のプロジェクトに埋め込むとさらに便利になるでしょう。
デモ:
http://demo.jb51.net/js/2014/jsilde/
ダウンロード: