0

这是关于 jQuery 淡入淡出的代码

function timecheck(obj,options,inAction){
    var items = options.items;

    // check if anything needs to be done
    for (var i=0; i<items.length; i++) {
            if(items[i][0]> obj.get(0).currentTime) {
                $('#item_'+i).hide();
            }else if(items[i][0]<=obj.get(0).currentTime && items[i][1] >= obj.get(0).currentTime && !inAction['item_'+i]){
                console.log(inAction['item_'+i] = true);
                $('#item_'+i).fadeIn('normal',function(){ inAction['item_'+i] = false; console.log(inAction); });


            }else if(!inAction['item_'+i]){
                console.log(inAction['item_'+i] = true);
                $('#item_'+i).fadeOut('normal',function(){ inAction['item_'+i] = false; console.log(inAction); });

            }

    }

此代码每 40 毫秒由 javascript 调用一次。我的问题是回调尝试设置错误的 inAction 元素。我怎么能提供呢?

4

2 回答 2

1

您可以使用 jQuery 动画队列。只需将代表动画队列名称的字符串传递给动画函数(hide、fadeIn、fadeOut、...)。例如,使用您的隐藏功能,如:

$('#item_'+i).hide({queue: "queueName"});

然后只需使用以下命令检索动画队列中剩余的动画数量:

$('.#item_'+i).queue("queueName").length;

您可以使用window.setInterval间歇性地检查长度值,然后在长度属性达到 0 时应用您的逻辑。

有关详细信息,请参阅 jQuery 文档:

队列

动画(对于 hide()、fadeIn() 和 fadeOut() 也是一样的)

于 2013-08-10T19:53:32.803 回答
1

For 循环继续增加。你需要一个闭包,因为你已经在使用 jQuery,这里有一个选项:

function timecheck(obj, options, inAction) {
    var items = options.items;

    // check if anything needs to be done
    $.each(items, function(i) {

        if (items[i][0] > obj.get(0).currentTime) {
            $('#item_' + i).hide();
        } else if (items[i][0] <= obj.get(0).currentTime && items[i][1] >= obj.get(0).currentTime && !inAction['item_' + i]) {
            console.log(inAction['item_' + i] = true);
            $('#item_' + i).fadeIn('normal', function () {
                inAction['item_' + i] = false;
                console.log(inAction);
            });


        } else if (!inAction['item_' + i]) {
            console.log(inAction['item_' + i] = true);
            $('#item_' + i).fadeOut('normal', function () {
                inAction['item_' + i] = false;
                console.log(inAction);
            });

        }

    });
}

否则,发生的事情是,当回调被调用时,它i已经等于items.length

于 2013-08-10T19:44:01.850 回答