2. 拡張機能
jQuery は、ユーザーが拡張できる 2 つの「基本クラス」、$.extend と $.fn.extend を提供します。 $.ajax、$.getJSON などの独自のメソッドを拡張するために使用されます。$.fn.extend は、jQuery オブジェクトのメソッドや操作を含む jQuery クラスを拡張するために使用されます。 jQuery の整合性を維持するために、私はプラグイン開発には $.fn.extend を使用する傾向があり、
3.jQuery が提供するセレクターはできるだけ使用しません。強力な機能を備えており、複数の CSS バージョンのセレクターと互換性がありますが、多くの学生がセレクターを使用する際の効率を重視していないことがわかります。
a) ID セレクターを使用してみます。jQuery のセレクターで使用される API は getElementById または getElementsByTagName に基づいています。したがって、jQuery は getElementById を直接呼び出して dom を取得するため、最も効率的なのは ID セレクターであることがわかります。を選択し、スタイルを通じて選択します。ブラウザは jQuery オブジェクトを取得するときに、多くの場合 getElementsByTagName を使用して取得してフィルターします。
b) 開発者がスタイル セレクターを使用して DOM を取得し、これらの DOM が同じタイプである場合、たとえば className が jquery であるすべての div を取得する場合、スタイル セレクターは tagName を明確に指定する必要があります。使用する必要がある記述方法は、$('.jquery') ではなく $( 'div.jquery') です。この方法で記述することの利点は、dom を取得するときに、代わりに jQuery が div を取得してフィルタリングすることになります。すべての dom を取得してからフィルタリングします。
このスライダー プラグインの名前には jSlider を使用します (プラグインの競合を避けるために、プラグインの名前も非常に特殊なものにする必要があります。ここでは単純にします)。
size: { barWidth: 200, sliderWidth: 5 },
barCssName: ' defaultbar',
completedCssName: 'jquery-completed',
sliderCssName: 'jquery- jslider',
sliderHover: 'jquery-jslider-hover',
onChanging: function() { },
onChanged: function() { }
}
$.extend({ },$.fn.jSlider.default,setting);
わかりました。以下では、私が定義したこれらの API の機能について説明します。
renderTo: jSlider のキャリアおよびコンテナ。jQuery オブジェクトまたはセレクターにすることができます。
enable: jSlider プラグインが使用可能かどうか。true の場合、エンドユーザーはドラッグ アンド ドロップを行うことができます。それ以外の場合は禁止されます。
initPosition: jSlider の初期値、「max」または「min」、つまりスライダーの値、1 または 0。
size: jSlider パラメーター (2 つの値を含む) barWidth - バーの長さ、sliderWidth - スライダーの長さ。
barCssName: バーのスタイル名。エンドユーザーが自分でスタイルを簡単に拡張できるようにします。
completedCssName: 完成したスタイル名。
sliderCssName: スライダーのスタイル名。
sliderHover: スライダーがフォーカスされているときのスタイル名。
onChanging: スライダーがドラッグされたときにトリガーされるイベント。
onChanged: スライダーのドラッグが終了するとイベントがトリガーされます。
この時点で、renderTo を jQuery オブジェクト (セレクターの使用と互換性があります) に強制的に変換する必要があります:
ps.renderTo = (typeof ps.renderTo == 'string' ?
$ (ps.renderTo) : ps.renderTo);
次に、レンダリングする HTML ツリーを出力します:
/* ----------> 🎜 >
><- ----------*/
var sliderbar = $('
div>')
.attr('class', ps.barCssName)
.css('width', ps.size.barWidth)
.appendTo(ps.renderTo)
var completedbar; = sliderbar.find ('div:eq(0)')
.attr('class', ps.completedCssName);
var slider = sliderbar.find('div:eq(1)')
.attr( 'class', ps.sliderCssName)
.css('width', ps.size.sliderWidth);
このようにして、HTML を UI に直接表示します。レンダリングには、スライダーバー、完了バー、スライダーを使用して、必要な 3 つのオブジェクトをキャッシュします。
わかりました。UI が表示された後、スライダーのドラッグを実現するメソッドを提供する必要があります。その前に、completedbar のリアルタイム更新であるメソッドも実装する必要があります。つまり、スライダーがドラッグされると、コンプリートバーが常に左側の領域を埋めます:
コードをコピー
コードは次のとおりです。 var bw = sliderbar.width(), sw = slider.width(); //スライダーがバーに表示されていることを確認します(制限付きにする)
ps.limited = { 最小: 0, 最大: bw - sw };
if (typeof window.$sliderProcess == '未定義') {
window.$sliderProcess = new Function('obj1', ' obj2', 'left',
'obj1.css ('left',left);obj2.css('width',left);');
}
$sliderProcess(slider, completedbar, eval('ps.limited.' ps.initPosition));
bw、sw は、スライダーバーとスライダーの長さを保存するために使用されます。これを防ぐために、ここでは ps.size の値が直接使用されません。スタイルの border-width が幅を損なうのを防ぎます。
スライダー[左]の最大値と最小値を格納する限定プライベートメンバーを定義し、eval('ps.limited.' ps.initPosition)を直接使用して後で取得することでスイッチ操作を回避します。
同時に、完成したバーの塗りつぶしの長さとスライダーの左の距離を見つけるために、グローバル関数を定義する必要があります。これに $sliderProcess という名前を付けました。
次にしなければならないことは、スライダーをドラッグ アンド ドロップすることです。ここでは、以前にリリースされた jQuery ドラッグ アンド ドロップ プラグインを使用し、適切なカスタマイズを行います:
コードをコピー
drag : function(e) {
var d = e.data;
var l = Math.min(Math.max(e.pageX - d.pageX d.left, ps.limited.min), ps.limited.max);
$sliderProcess(slider, completedbar, l);
//2 つのパラメータをプッシュします: 1 番目:percentage、2 番目:event
ps.onChanging(l / ps.limited.max) , e );
},
drop: function(e) {
slider.removeClass(ps.sliderHover);
// 2 つのパラメーターをプッシュします: 1 番目: パーセント、2 番目: イベント
ps. onChanged(parseInt(slider.css('left')) / sw - ps.limited.max, e);
$().unbind('mousemove', slide.drag).unbind('mouseup' , slide .drop);
}
};
if (ps.enable) {
//バインドイベント
slider.bind('mousedown', function(e) { var d = {
left: parseInt(slider.css('left')),
pageX: e.pageX
};
$(this).addClass(ps.sliderHover);
$().bind('mousemove', d, slide.drag).bind('mouseup', d, slide.drop)
}
このように、jSliderのenable属性がtrueの場合、エンドユーザーがマウスを押すとmousemoveイベントがバインドされ、マウスがポップアップすると削除されます。スライダーのleft属性を同期的に更新するだけで済みます。同時に、ドラッグの onChanging メソッドとドロップの onChanged メソッドをバインドします。これらの 2 つのメソッドにプッシュされるパラメータは同じで、1>パーセント、つまり 0 ~ 1 の範囲の値です。 2>イベント。
これで、jSlider プラグインが基本的に形になり、ユーザーにドラッグ可能なスライダーを提供できるようになりました。
[拡張機能] ユーザーがそう簡単に満足しない場合があるため、「自分で値を設定したいのですが、この機能を提供したらどうですか?」と叫ぶ人がいました。
次に、jSlider の値を設定するメソッドをユーザーに公開する必要があります。最初に考慮すべきことは、このメソッドにはアクション オブジェクト (jSlider) が必要であるため、現時点ではこれを行いたくないということです。アクション オブジェクトをパラメータとして渡し、このメソッドをプラグインとして開発します。メソッドに setSliderValue という名前を付け、v (値) と callback (設定完了後のコールバック関数) の 2 つのパラメータを開きます。
つまり、$.fn.setSliderValue(v,callback);
OK、残りはアクション オブジェクトであることがわかります。スライダーがドラッグされると、主にアクションが実行されます。スライダーと completedbar の 2 つのオブジェクトに作用し、jSlider プラグインの最後にスライダー オブジェクトを返すコードを追加します:
slider.data = { bar: sliderbar, completed: completedbar };
return slider;
この方法で、jSlider を直接初期化できます。変数を使用して jSlider オブジェクトを取得し、setSliderValue メソッドを呼び出します。
var slider = $.fn.jSlider({});
slider.setSliderValue(v,function(){ });
setSliderValue コード:
try {
//validate
if (typeof v == '未定義' || v 1) {
throw new Error(''v' は 0 から 1 までの Float 変数でなければなりません。');
}
var s = this;//validate
if (typeof s == '未定義' ||
typeof s.data == 'undependent ' ||
typeof s.data.bar == '未定義') {
throw new Error('メソッドをオブジェクトにバインドしましたそれはスライダーではありません!');
}
$sliderProcess(s, s.data.completed, v * s.data.bar.width());
if (typeof callback != '未定義') { callback(v); }
}
catch (e) {
alert(e.message);
}
ここではグローバル関数 $また、sliderProcess は completedbar[width] と slider[left] の更新を実行するために呼び出されます。ここで例外処理が実行されるため、エンドユーザーは setSliderValue が jSlider オブジェクトに適用されることを確認するときに、この例外処理コードを削除できます。
【スキン】
jSlider の API に従って、より簡単にスキンを設定できます。jSlider をよりプロフェッショナルなものにするために、2 つの写真が必要です:
として使用します。 completedbar の背景 'bar' と 'slider' をスライダーの背景として使用します。OK、スタイルを更新しましょう:
BlueSkin
.bluebar
{}{
margin-top: 10px;高さ: 4px;
背景:#F7F7F7;
位置: 相対;
.bluebar .jquery-completed
>高さ : 4px;
背景:url(../images/slider/blue/bar.gif) 左中央 繰り返しなし
左:0;絶対;
}
.bluebar .jquery-jslider
{}{
高さ: 17px;
background:url(../images/slider/blue/slider.gif) 中心 0 no- 繰り返し;
トップ: -4px;
カーソル: ポインタ;
.bluebar .jquery-jslider-hover
{ }{
background-position:center -17px;
}
スタイルを設定するときに子ノードのスタイルに API のデフォルト値を使用させるため、作成時にjSlider を barCssName に設定するだけです:
コードをコピー
コードは次のとおりです:
var blue = $.fn.jSlider({
renderTo: '#slidercontainer',
size: { barWidth: 500, sliderWidth: 10 },