0

我正在尝试在 jQuery while 循环完成其设置循环后执行一个功能。循环靠近底部

这是我当前的脚本:

$(document).ready(function() {


$("#radial_container").radmenu({
    listClass: 'list', // the list class to look within for items
    itemClass: 'item', // the items - NOTE: the HTML inside the item is copied into the menu item
    radius: 150, // radius in pixels
    animSpeed:400, // animation speed in millis
    centerX: 160, // the center x axis offset
    centerY: 150, // the center y axis offset
    selectEvent: "click", // the select event (click)
    activeItemClass: "active",
    angleOffset: 185, // in degrees
    onSelect: function ($selected) {
        $(".radial_div_item").animate({
            //opacity: 0.5
        }, 0);
        $selected.animate({
            //opacity: 1
        }, 0);
        var inner = $selected.html();
        var i = 0;
        if ($selected.index() > 3) {
            while (i < $selected.index()) {
                $("#radial_container").radmenu("next");
                //Do something once loop finishes
            }
        } else {
            while ($selected.index() > i) {
                $("#radial_container").radmenu("prev");
                //Do something once loop finishes
            }
        }
    }

});
});

一位朋友建议我做这样的事情,但到目前为止它对我没有用:

var looping = function(callback){ 
  *while loop* 
  callback();
}

我已经通读了这篇文章,但无法在此处找到解决方案。

我没有包含我的标记,因为它似乎没有必要,但如果需要,我可以发布它。

谢谢大家。

4

2 回答 2

1

首先,看起来您的循环正在重新循环并且永远不会结束。

while ($selected.index() > i) {
    $("#radial_container").radmenu("prev");
    //Do something once loop finishes
}

除非此代码$("#radial_container").radmenu("prev");自动递增,index()否则此$selected循环将永远持续下去,因此您需要考虑手动递增$selected.index()i在循环的每次迭代后手动递增。

但是这个问题的答案很简单,你不必在循环内运行你的函数,你可以在循环外但在 if 语句中运行它。所以一旦循环完成迭代,函数就会运行,就像这样。

if ($selected.index() > 3) {
    while (i < $selected.index()) {
        $("#radial_container").radmenu("next");
    }
    runFunctionHere();
} else {
    while ($selected.index() > i) {
        $("#radial_container").radmenu("prev");
    }
    runFunctionHere();
}

我希望这会有所帮助。

于 2013-07-05T13:04:38.680 回答
0

但是,如果您只是不那样包装它:

while ($selected.index() > i) {
    $("#radial_container").radmenu("prev");
}
//Do something once loop finishes

它会起作用的!或者我错过了什么?

于 2013-07-04T11:45:03.780 回答