2012-06-10 40 views
0

此代码完美工作,除了跳过整个$(window).resize区域。删除除一个变量外的所有变量似乎是“修复它”,但这显然不起作用。

我错过了一个显而易见的问题吗?控制台中没有错误。这里有一个演示,如果你想在这挑或看到完整的javascript:http://jdsn.co/demo/reader.html

if(main_reader_height + offset_height > initviewport) { 
    $('.main_reader footer').waypoint(function(event, direction) { 
     if (direction === 'down') { 
      $('.nav_items, .nav_prev, .nav_next').addClass('snap'); 
      $(window).resize(function() { 
       window.offset = $('.main_reader article').offset().top; 
       window.viewport = $(window).height(); 
       window.main_height = $('.main_reader article').height(); 
       window.bottom_offset = window.viewport - window.offset - window.main_height - 80 
       $('.nav_next').height(viewport - offset - bottom_offset - 80); 
      }); 
      $('.snap').height(window.bottom_offset) 
     } 
     else { 
      $('.nav_items, .nav_prev, .nav_next').removeClass('snap'); 
     } 
    }, { 
     offset: '100%' // middle of the page 
}); 
+0

从查看[jQuery文档](http://api.jquery.com/resize/)看起来resize处理程序签名包含一个事件对象参数,所以您是否尝试将您的JavaScript更改为'$(window ).resize(函数(e){'? –

+0

@MarkM:如果你不使用参数,你不需要将它添加到签名中,它仍然会被传递,但函数会忽略它(你仍然可以通过'arguments'数组访问它)。 –

回答

0

我看到两个问题:

  1. 的.resize()事件仅会从第一后回调订阅航点。另外,每次遇到路点事件时,都会为.resize()创建一个新订阅者,这可能会导致问题。
  2. 您在定义这些变量时使用window.的任何真正原因?这将它们附加到主窗口对象上,这实际上并不需要,并且可能会导致其他问题。

从那里,这取决于你期待的行为。看看代码并不能完全表达你想要完成的事情。进一步阐述可能会产生更多有用的答案。

相关问题