2017-06-05 13 views
1

私はこれに対する解決策を見つけることができませんでしたが、mousedown後の2番目の解決策は機能しません。私はそれを束縛することについて別のものを見たことがあるが、私は運がなかった。 (コード内の他の場所でも動作します)。 setIntervalからこれは内部で機能していません

$(".rightArrow").click(function() {  
    var stop_slide = parseInt($(this).prev().css("marginLeft"));  
    scroll_size = $(this).prev().children().size() * 177 * -1;  
    if(stop_slide > scroll_size){ 
     var int00; // declared here to make it visible to clearInterval. 
     $(this).mousedown(function(){ 
      int00 = setInterval(function() { 
       $(this).prev().css({ marginLeft : "-=1px" }); 
      }, 1); 
     }).mouseup(function() { 
      clearInterval(int00); 
     }); 

    } 

}); 
+0

'setTimeout'の3番目のパラメータとして' this'を渡してみましたか? –

+0

関連[コールバック内の正しい 'this'コンテキストにアクセスするには?](https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback ) –

答えて

1

thismousedownからthisとは異なります。単純に、この方法をself変数を使用します。

$(".rightArrow").click(function() { 
    var stop_slide = parseInt($(this).prev().css("marginLeft")); 
    scroll_size = $(this).prev().children().size() * 177 * -1; 
    if (stop_slide > scroll_size) { 
    var int00; // declared here to make it visible to clearInterval. 
    $(this).mousedown(function() { 
     var self = this; 
     int00 = setInterval(function() { 
     $(self).prev().css({ 
      marginLeft: "-=1px" 
     }); 
     }, 1); 
    }).mouseup(function() { 
     clearInterval(int00); 
    }); 
    } 
}); 

function声明を経由して宣言された各機能は、独自のコンテキスト(thisを)持っている、それゆえ、あなたは別の関数でそれにアクセスするための変数に前のコンテキストを保存する必要があります。

もう一つの方法は、バインドを使用することです:

int00 = setInterval(function() { 
    $(this).prev().css(...); 
}.bind(this)); 

これはsetIntervalコールバックに現在のコンテキスト(現在this)をバインドします。

そして、あなたはを使用する場合は、矢印の機能を使用することができます。

// the `this` from here 
int00 = setInterval(() => { 
    // will be the `this` from here 
}); 

矢印関数は何のコンテキストを持っていない - 彼らは現在のコンテキストを継承します。

+0

完璧なおかげで! –

関連する問題