jQuery:本地函数的递归调用不起作用

时间:2013-05-21 22:23:00

标签: jquery function recursion local

我尝试使用Google来解决我的问题,但我找不到解决方案。我写了一个小的jQuery脚本,可以独立地上下滑动两个div容器。为了重复这个滑动的环形,我使用了一个递归调用。这是我的代码:

jQuery.fn.scroller = function() {
      var scrollamount = $(this).height() - $(window).height();
      var scrollduration = scrollamount * 10;
      var pauseduration = 3000;
      var docheight = $(this).height();
      var doScroll = function () {
          $(this).delay(pauseduration)
              .animate({top: -scrollamount, height: docheight}, scrollduration, 'linear')
              .delay(pauseduration)
              .animate({top: 0, height: $(window).height()}, scrollduration, 'linear', $(this).doScroll);

          };
      $(this).height($(window).height()).doScroll();
      };
$(document).ready(function(){
    $('#globdiv').scroller();
    $('#globdiv2').scroller();
    });

错误控制台指示此行中的doScroll

$(this).height($(window).height()).doScroll();

不是一个功能。 我找到了另一种解决方案:

$.fn.doScroll = function(pauseduration, scrollamount, scrollduration, docheight) {
          $(this).delay(pauseduration)
              .animate({top: -scrollamount, height: docheight}, scrollduration, 'linear')
              .delay(pauseduration)
              .animate({top: 0, height: $(window).height()}, scrollduration, 'linear', function(){
                  $(this).doScroll(pauseduration, scrollamount, scrollduration, docheight);
              });
     };
$.fn.scroller = function(){
      var scrollamount = $(this).height() - $(window).height();
      var scrollduration = scrollamount * 10;
      var pauseduration = 3000;
      var docheight = $(this).height();
      $(this).height($(window).height()).doScroll(pauseduration, scrollamount, scrollduration, docheight);
      };
$(document).ready(function(){
    $('#globdiv').scroller();
    $('#globdiv2').scroller();
    });

工作正常,但我想了解为什么我的第一种方法不起作用以及我可以做些什么来使其运行。 最好的问候 - Ulrich

2 个答案:

答案 0 :(得分:0)

您的第一种方法不起作用,因为doScroll不是jQuery对象上的方法,它只是一个本地函数。你可以让它像这样工作:

doScroll.apply($(this).height($(window).height()));

或者您可以更改doScroll的签名以接受元素/ jQuery对象作为参数:

var doScroll = function (ele) {
          $(ele).delay(pauseduration)
              .animate({top: -scrollamount, height: docheight}, scrollduration, 'linear')
              .delay(pauseduration)
              .animate({top: 0, height: $(window).height()}, scrollduration, 'linear', function (){doScroll(ele);})};

          };
          doScroll($(ele).height($(window).height()));
      };

答案 1 :(得分:0)

函数.doScroll不适用于$(this),但是对于“this”,这就是链接不起作用的原因,试试这个:

$(this).height($(window).height());
this.doScroll();