これらの関数が実行していることを実行している理由を理解するためのガイダンスが必要です...
1.)私のWebページには、スライダー機能を利用する3つの異なるパネルがあります。この機能は、次および前のアンカーリンクを使用してスライダー機能を持つ順序付けられていないリストを作成します。以下のコードを参照してください。
function Slider(id) {
var _this = this;
this.id = id;
if (!id) return false;
this.index = 0;
this.slider = $(this.id);
this.length = this.slider.children().length;
this.width = $(this.id).outerWidth();
this.totalWidth = this.length * this.width;
$(id).addClass('slideWrapper').wrap('<div class="slideViewport">').after('<div class="sliderNav"><a href="#" class="prev">Previous</a><a href="#" class="next">Next</a></div>').css({
'width': this.totalWidth
}).children().addClass('slide').css({
'width': this.width
});
$('.slideViewport a.next').click(function(e) {
e.preventDefault();
return _this.next();
});
$('.slideViewport a.prev').on(function(e) {
e.preventDefault();
return _this.prev();
});
}
ページ上でこれらのSliderインスタンスを複数実行しようとすると、.nextアンカーをクリックすると、クリックされた要素とその下の要素のいずれかが、スライドショーの次のリスト要素に移動します。2番目のパネルに移動すると、最初のパネルを除くすべてが実行され、3番目のパネルでは、1番目と2番目を除くすべてが実行されます。ハンドラーは、すべてのインスタンスではなく、クリックしたイベントに対してのみ実行されると予想していました。私this
は私のイベントで使用しているので、その後のクラスの。ここで何が起こっているかについての説明は非常に役に立ちます。
2.)今、私は、アンカーがクリックしました。私はこのコードが機能することを理解しました:
$('.slideshow').on("click", "a.next", function(e) {
e.preventDefault();
return _this.prev();
});
しかし、私が言った真実は、なぜこれが機能しているのかよくわかりません。私の理解では、JQueryはa.nextアンカーがクリックされたかどうかを確認するだけで、処理関数を$('。slideshow')セレクターに渡します。これにより、$( 'slideshow')そしてそれらすべてに対して.next()関数を実行します。それはそれについて考える正しい方法ですか?
3.)次のコードスニペットにより、すべてのスライドショーでnext()関数が1回ではなく、2回実行されるのはなぜですか?これが何も返さないのは本当に好きではないので、この特定のコードを使用したくはありませんが、もう少しよく理解したいと思います...
$('.slideViewport a.next').on("click", function(e) {
e.preventDefault();
$('.slideshow').each(function() {
_this.prev();
}
});
このコードのいずれかを理解するのを手伝っていただければ幸いです。このシナリオでの伝播の観点から、DOMで何が起こっているのかをもっとよく理解したいのですが、私が読み込もうとしたすべてのことで、私はさらに混乱したように感じました。ありがとう!