解除绑定后使用jquery无法绑定窗口上的滚动

时间:2017-08-31 10:29:10

标签: javascript jquery

我正在使用window.scroll事件来加载div上的内容,就在滚动的按钮到达时。

 $(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
       $(window).unbind('scroll');
       loadMoreCommentsOnArticle();
   }
});

  function loadMoreCommentsOnArticle(){
                $(window).bind('scroll');
                var dynamicData = fetchData();
                $('#parentElement').append(dynamicData);
}
最初绑定后,

滚动没有绑定。也许是通过$(window).unbind(' scroll')。但我正在尝试使用$(window).bind(' scroll')再次绑定滚动;但它没有用。

不使用$(window).unbind(' scroll')。滚动事件很快就会触发。

根据Rory,我正在使用这种方式

var $window = $(window);
function windowScroll() {
  if ($window.scrollTop() + $window.height() > $(document).height() - 100) {
    window.off('scroll');
    loadMoreCommentsOnArticle();
  }
}
 $window.scroll(windowScroll);

1 个答案:

答案 0 :(得分:0)

问题是因为当你重新绑定loadMoreCommentsOnArticle()中的滚动事件时,你没有提供运行的功能。您可以通过将滚动逻辑解压缩到它自己的函数来解决问题,以便更轻松地进行绑定/重新绑定。

另请注意,bind()unbind()已弃用。您应该使用on()off()代替。

var $window = $(window);

function windowScroll() {
  if ($window.scrollTop() + $window.height() > $(document).height() - 100) {
    $window.off('scroll');
    loadMoreCommentsOnArticle();
  }
}

$window.scroll(windowScroll);

function loadMoreCommentsOnArticle() {
  $window.on('scroll', windowScroll);
  $('#parentElement').append(fetchData());
}

function fetchData() {
  console.log('loading data...')
  return '<div>More data...</div>';
}
#parentElement div {
  height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parentElement">
  <div>Some data...</div>
</div>