簡體   English   中英

停止遞歸回調的最佳方法是什么?

[英]What's the best way to stop a recursive callback?

我正在嘗試使用jquery庫'jquery.transit'搖動元素,這是代碼。

var s = $('myele');
var randomTran = function(){
    var rh = Math.floor((Math.random() * 10) - 5),
        rv = Math.floor((Math.random() * 10) - 5);
    s.transit({x:rh,y:rv},50,randomTran)
    }

問題是元素會不斷晃動,我需要在遞歸回調中添加一些停止符號。 我能想到的是將函數外部的變量設置為標志。

var s = $('myele');
var flag = 0;
var randomTran = function(){
    if (flag<6) {
        var rh = Math.floor((Math.random() * 10) - 5),
        rv = Math.floor((Math.random() * 10) - 5);
        s.transit({x:rh,y:rv},50,randomTran)
    };
    flag++;
    }

但是與此同時,我聞到了全局變量的惡臭。 那么問題1有更好的方法嗎? 問題2:是否有任何可以使元素動搖的插件?

您無需全局即可執行相同的操作:

var randomTran = function(flag){
  flag = flag || 0;
  if (flag<6) {
    var rh = Math.floor((Math.random() * 10) - 5),
        rv = Math.floor((Math.random() * 10) - 5);
    s.transit({x:rh,y:rv},50,randomTran.bind(this, ++flag))
  };
}

除了s ,這不依賴任何外部變量,並且按照編寫,不需要修改任何其他代碼。

為什么要使其全球化? 您可以簡單地將其附加到s對象。

var s = $('myele');
s.shakesLeft = 10;

var randomTran = function() {
    if (s.shakesLeft--) {
        var rh = Math.floor((Math.random() * 10) - 5),
            rv = Math.floor((Math.random() * 10) - 5);
        s.transit({x:rh,y:rv},50,randomTran)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM