jquery在调整窗口大小时为变量分配新值

jquery在调整窗口大小时为变量分配新值,jquery,window-resize,Jquery,Window Resize,我是jQuery的新手,希望能从你们这里得到一些帮助。 我设法创建了一些可用于动态构建内容的滚动功能 我有几个div要“滚动到”。这些div是 始终与视口一样大。在我调整窗口大小之前,一切正常。在窗口上调整窗口大小 resizeDiv和setScrollingPoints将再次触发。现在的问题是,动画转到旧坐标,然后缓慢滚动到正确的位置 我发现resize函数被多次调用,因此setScrollingPoints函数也被多次调用。我不明白的是为什么旧的位置没有被覆盖。也许你能帮我 太多了! 丹 我

我是jQuery的新手,希望能从你们这里得到一些帮助。 我设法创建了一些可用于动态构建内容的滚动功能

我有几个div要“滚动到”。这些div是 始终与视口一样大。在我调整窗口大小之前,一切正常。在窗口上调整窗口大小 resizeDiv和setScrollingPoints将再次触发。现在的问题是,动画转到旧坐标,然后缓慢滚动到正确的位置

我发现resize函数被多次调用,因此setScrollingPoints函数也被多次调用。我不明白的是为什么旧的位置没有被覆盖。也许你能帮我

太多了! 丹

我的代码如下所示:

 function resizeDiv(target) {

      // resizing Divs
      var viewportHeight = $(window).height();
      var viewportWidth = $(window).width();

      $(target).height(viewportHeight).width(viewportWidth);

 } // end resize Divs


 function setScrollingPoints() {
      var wallpapers = $('.wallpaper');
      var buttons = $('.button');

      var scrollPositions = new Array();

      // Cache Wallpaper positions
      wallpapers.each(function(i) {
           scrollPositions[i] = Math.round($(this).offset().top);
       $(this).addClass('wallpaper'+ i);
      });


      // setting next Buttons
      buttons.each(function(i) {
           $(this).attr('id','button'+i);
      if(i == wallpapers.length - 1) {
           $(this).remove();
      }

 });

  $('.nextButton').click(function() {

    // get button id
    var elementID = $(this).attr('id');

    // remove alpha characters from id and convert it to a numeric var
    elementID = parseInt(elementID.replace(/\D/g,''));

    var next = elementID + 1;
    var previous = elementID -1;

    var nextWallpaper = '.wallpaper' + next;
    var previousWallpaper = '.wallpaper' + previous;


    if(!(next == wallpapers.length)) {
        $('html, body').scrollTo(scrollPositions[elementID+1]);
    });


  });

  $(window).resize(function() {

          resizeDiv('.wallpaper');
          setScrollingPoints();

  });



$(document).ready(function() {

// resize all wallpaper elements to viewport size
resizeDiv('.wallpaper');

// set scrollingPositions
setScrollingPoints();

});

在setScrollingPoints中,更改:

var scrollPositions = new Array();

如果您从引用到scrollPositions的前面获取var关键字,您将讨论全局范围scrollPositions,您的任何函数都可以访问它

不同的问题:

你有

$(this).addClass('wallpaper'+ i);
以百万分为单位。您没有删除以前的类

最后一期

只是看了看你的JSFIDLE(谢谢你为我制作)

你的问题不是你的阵列。在
setScrolingPoints()的内部,您正在设置单击侦听器:

$('.nextButton').click(function() {
这不会覆盖上一个侦听器,它只是添加了另一个侦听器。您需要添加以下内容:

$('.nextButton').off("click");
上面的
$('.nextButton')。单击(函数(){


您只是在每个按钮上触发了所有旧的侦听器。

uups,很抱歉,我有一个旧版本的document.ready。我试图提醒scrollPositions,在调整大小后,此数组将变为多维数组。如何在重新分配新值之前清除数组?谢谢小故障,但我仍然有相同的问题。准确地说,array仍然是多维的,但是现在所有的实例都有了正确的最终位置。但是像这样,scrollto仍然被触发多次,并且在所有的scrollto都完成之前不可能进一步滚动。我更改了
$('html,body').scrollto(scrollPositions[elementID+1]);
$('html,body').stop().scrollto(scrollPositions[elementID+1]);
现在它可以工作了,但这只是一个解决办法,因为每次调整窗口大小时,数组都会变得越来越大。不同的问题:我已经看到了,但似乎相同名称的旧类被覆盖。调整大小后,我在firebug中看不到任何加倍的类。请尝试使用console.log($(“.wallper”).length),并告诉我每次调整窗口大小时该数字是否会增加(这将在javascript控制台中打印出该值)
$('.nextButton').off("click");