代码之家  ›  专栏  ›  技术社区  ›  Kim Stacks

如何将setInterval和clearInterval用于无限库

  •  1
  • Kim Stacks  · 技术社区  · 14 年前

    我正在尝试使用javascript为画廊获取图片,但我遇到了一些问题。

    $(document).ready(function() {
    
        var currentPage = 1;
        var totalPics = 2;
        var picPerPage = 1;
        intervalID = window.setInterval(function() {
              console.log(currentPage*picPerPage);
              if (totalPics > (currentPage*picPerPage)) {
            currentPage++;
            fetchNextPage(currentPage);
              } else {
            clearInterval(intervalID);
              }
    
    
        }, 2000);
    
    
    });
    

    由于某种原因,它将保持循环。我想让它停下来 currentPage * picPerPage > totalPics .

    我在Ubuntu使用火狐3.6.8

    更新

    谢谢大家。

    我认识到这个问题是由于fetchnextpage()函数引起的。

    一经我提出意见,循环问题就解决了。

    但是,我需要fetchnextpage函数来运行ajax函数来获取另一组图像。

    以下是功能

    function fetchNextPage(currentPage) {
    
        newUrl = currentUrl + currentPage;
    
        $.ajax({
            url: newUrl ,
            success: function(data) {
                // append page 2 themes
                $('#themes-list').append(data);
    
            }
        });
    }
    

    那么我该怎么做才能让我的无限画廊发挥作用呢?

    谢谢您。

    3 回复  |  直到 14 年前
        1
  •  1
  •   donohoe    14 年前

    你的代码对我有用。我放在console.log()而不是函数中,但没有纠正 intervalID 定义不正确。函数是否可能改变值?

    var currentPage = 1;
    var totalPics   = 2;
    var picPerPage  = 1;
    
    intervalID = window.setInterval(function() {
    
        console.log("A", currentPage*picPerPage);
    
        if (totalPics > (currentPage*picPerPage)) {
            currentPage++;
            console.log("B", currentPage);
        } else {
            console.log("C All Done");
            clearInterval(intervalID);
        }
    
    }, 2000);
    

    我得到的输出(OSX上的Chrome 5.0.375.127):

    A 1
    B 2
    A 2
    C All Done
    

    更新 :因此,使用您添加的代码,我有几个问题和评论:

    function fetchNextPage(currentPage) {
        var newUrl = currentUrl + currentPage; // Added var declaration here. 
        $.ajax({
            url: newUrl ,
            success: function(data) {
                // append page 2 themes
                $('#themes-list').append(data);
            }
        });
    }
    

    所以这里缺少的是返回的数据…你能举一个什么价值的例子吗 data 是?

        2
  •  0
  •   Alex Reitbort    14 年前

    尝试添加 var 之前 intervalID = window.setInterval 正确定义intervalid变量。

        3
  •  0
  •   Dancrumb    14 年前

    亚历克斯的回答暗示了一个可能的问题。

    在没有其他代码的测试环境中,此代码工作得很好。

    然而, intervalID 定义为全局变量。如果在其他地方执行的代码也定义了 互有效性 然后它会在这一个上面跺脚。

    使用 var intervalID 以限制此变量的范围。