2017-05-24 18 views
0

私は小さなjqueryプラグインを作成しようとしています。以前は主にJavaScriptを使っていました。 this.each関数を理解していません。まず、$ .fnの新しいメソッドを記述します。このメソッドでは、offset()を取得したい。すべての要素のtop。jquery plugin this.each in function

$.fn.jquerynParalFade = function() { 
    this.each(function() { 
    console.log($(this).offset().top); 
    }); 
} 

これは問題なく機能します。しかし、画面のサイズを変更した場合(たとえば、デバイスを回転させるなど)、すべての要素の新しい位置を取得したいと考えています。このため私はサイズ変更時に実行できる関数を追加しました。

$(window).resize(function() { 
    resize(); 
}); 

ここでは、関数のthis.each()を使用できないという問題があります。代わりに$(this).eachを使用します。しかし、私がコンソールにすれば、offset()$(this)の機能ではないことがわかります。私はjQueryプラグインの機能にthis.eachを使用して、どのように

function resize(){ 
    $(this).each(function(index) { 
    console.log($(this).offset().top); 
    }); 
} 

これは、そのコードがどのように見えるのですか?あなたは、サイズ変更が正しく動作するために何thisすると、あなたの関数にあるのコンテキストをバインドする必要があります

+0

「$(これ)」とは何ですか? 'resize()'を呼び出すと、 'this'を何にでも設定していないからです。 –

答えて

1

var myResize = resize.bind(this) 
myResize() // now it should work 

もう一つの方法は、コンテキストを渡すことです:

function resize (context) { 
    context.each(...) 
} 

$(window).resize(function() { resize(this) }) 

いくつかの概念へについて:

+0

私は本当にそれを理解しようとする!私は2番目を理解していると思います。それは動作しません。コンソールはcontext.eachが関数ではないことを私に伝えます。しかし、私は最初のものがよりスマートだと信じているので重要ではありません。私はバインドメソッドを理解していません。これを私のサイズ変更関数にバインドするのですか?はいの場合、変数にバインドを保存する理由は?そして次の行で新しい変数を呼び出しますか?申し訳ありませんが、非常に多くの質問! –

+0

btwコンソールでは、resize関数の中で、これは次のようなものです:Window→file:/// C:/xampp/htdocs/parallax/index.html。これは確かにですか?私はオブジェクトを期待していたので! –

+0

私はそれを得たURLを読んだ後ok。彼らはとても役に立ちました。大いに感謝する! –