【问题标题】:Javascript function shows "undefined" in consoleJavascript 函数在控制台中显示“未定义”
【发布时间】:2018-01-17 01:57:04
【问题描述】:

我有一组图像,我想一次闪烁一次。几年前,我在一个旧网站上运行了以下代码,并想重用该代码,但我无法让它在新网站上运行。

$('document').ready(function() {

    var myArray = ["img.square1","img.square2","img.square3","img.square4","img.square5","img.square6","img.square7","img.square8","img.square9","img.square10","img.square11","img.square12","img.square13","img.square14","img.square15"];

    console.log(myArray)
    var count = 15;
    function counter() {
        if(count < 16 && count > -1){
            $(myArray[count]).fadeTo(100, 0.1, function(){
                $(myArray[count]).fadeTo(100, 0.7, function(){
                    $(myArray[count]).fadeTo(200, 0.5, function(){
                        $(myArray[count]).fadeTo(500, 1);
                        count--
                console.log(count);
                    });                                      
                });

            });

        }else{
            clearInterval(myInterval);  
            //console.log("interval cleared");
        }
    }
    //counter();
    try{
        counter();
        alert('I guess you do exist');
    }
    catch(e){
            alert('An error has occurred: '+e.message);
    }

    console.log(counter());
    var myInterval = setInterval(counter(), 1100);
});

【问题讨论】:

  • 函数counter没有return语句,相当于return undefined
  • 另外,请注意您正在错误地执行setIntervalsetInterval 的参数必须是一个函数,您传递的是 调用函数的结果 - var myInterval = setInterval(counter, 1100); 也是如此(已删除 ()
  • 为什么需要setInterval()
  • 在尝试了下面的代码和上面的建议后,我发现我的代码中存在问题,它只是变量“count”,我从旧/原始代码更改了数组中的图像数量,但没有考虑到数组的“0”,因此只要将“count”更改为 14,所有好的工作样本就在这里 [link]marquesinteriors.com.au/check/revamp_1/[/link]

标签: javascript jquery arrays loops setinterval


【解决方案1】:

您可以使用.queue().fadeTo() 回调替换setInterval()

function counter(selector) {
  return $(selector).queue("images", $.map($(selector), function(image) {
    // `next` is a reference to the next function in `queueName`: `"images"`
    return function(next) { 
      return $(image).fadeTo(100, 0.1, function() {
        $(this).fadeTo(100, 0.7, function() {
          $(this).fadeTo(200, 0.5, function() {
            $(this).fadeTo(500, 1, next);
          });                                      
        });
      });
    }
  })).dequeue("images").promise("images")
}

counter("img[class^=square]")
.then(function() {
  console.log("done", this)
})

【讨论】:

  • 我无法让这段代码按我的需要工作。我确实得到了原始代码,请参阅我上面的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2016-06-04
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多