jQuery在移动Safari / iOS上检测页面底部

时间:2012-06-23 20:56:36

标签: iphone scroll detect

我基本上想要与facebook,twitter和所有其他“无限”滚动网站相同的功能,我现在使用的代码是

jQuery(document).ready(function(){
    $ = jQuery;
        $(window).scroll(function(){
            if ($('.iosSlider').is(':visible'))
            {
                if($(window).scrollTop() + $(window).height() == $(document).height())
                {
                $.get('/our-work/fakework.php', function(data) {
                $('#mobile-thumbs').append(data);
                });
                }
             }
        });
});

这样可以在所有桌面浏览器上完美运行,甚至在我的黑莓手机上也可以在垃圾邮件向下滚动按钮后工作。

然而,它在iphone或ipad上都没有被检测到,我认为它与视频有关,但是谁知道。

我尝试使用

的视口高度方法
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">

但这似乎也无法修复它!

所以请有人就此如何在iDevices上检测页面底部进行分享!

谢谢!

欧文

4 个答案:

答案 0 :(得分:9)

经过多年的调试,我发现了

if($(window).scrollTop() + $(window).height() == $(document).height())

实际上从未真正得到满足,但是它已经被满足了,但是看起来移动野生动物园并没有在视口移动时运行任何javascript。

这意味着除非你在文件高度上完全停止滚动(没有弹性底部物体),否则它将非常不可能达到相同的高度。

所以我只是简单地将代码更改为等于相同的高度,以检查它是否相等或更多,这样即使滚动过去也会触发!

所以修复程序如下所示

if($(window).scrollTop() + $(window).height() >= $(document).height()){

因此修改后的代码现在看起来像

jQuery(document).ready(function(){
    $ = jQuery;
        $(window).scroll(function(){
            if ($('.iosSlider').is(':visible'))
            {
                if($(window).scrollTop() + $(window).height() >= $(document).height())
                {
                $.get('/our-work/fakework.php', function(data) {
                $('#mobile-thumbs').append(data);
                });
                }
             }
        });
});

它现在的工作就像一个魅力!

答案 1 :(得分:2)

完全工作的多浏览器和多设备兼容的解决方案:

function getDocumentHeight() {
return Math.max(
    Math.max(document.body.scrollHeight, document.documentElement.scrollHeight),
    Math.max(document.body.offsetHeight, document.documentElement.offsetHeight),
    Math.max(document.body.clientHeight, document.documentElement.clientHeight)
);
}

然后......

$(window).scroll(function() {
     var docHeight = getDocumentHeight();
     if($(window).scrollTop() + window.innerHeight == docHeight)
                 {
                      // enter your code here
                 }
        });

也不要忘记viewport meta:

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">

答案 2 :(得分:1)

我有同样的问题。代码段在桌面上运行良好,但在iOS移动设备上运行不正常。将document替换为body后问题得以解决。 此外,最好检查一下你是否接近屏幕底部:

if($(window).scrollTop() + $(window).height() > $('body').height() - 200)

答案 3 :(得分:0)

此解决方案将在所有设备上运行:

window.onscroll = function() {
  var d = document.documentElement;
  var offset = d.scrollTop + window.innerHeight;
  var height = d.offsetHeight;

  console.log('offset = ' + offset);
  console.log('height = ' + height);

  if (offset >= height) {
    console.log('at the bottom');
  }
}