JavaScript:滚动并获取项目位置会触发错误

标签 javascript infinite-scroll

我正在检查页面底部是否可见某个元素,以应用滚动自动分页。它工作正常并且 ajax 被解雇,但我一直在日志中得到这个

allNews:418 Uncaught TypeError: Cannot read property 'top' of undefined
at isScrolledIntoView (allNews:418)

这是代码,请注意默认情况下 img#loader 是不可见的

<script>
    $(document).ready(function() {

       $(window).scroll(function () {
            if (isScrolledIntoView("img#loader")) {
                var cur_page = parseInt($("#cur_page").text());
                var last_page = parseInt($("#last_page").text());
                $("img#loader").remove();
                if (cur_page < last_page) {
                    $(".blog_loading").css('display','block');
                    cur_page++;
                    $("#cur_page").text(cur_page);
                    $.ajax({
                        type: 'GET',
                        url: '/newsPaginate/<?=$lang?>/' + cur_page,
                        success: function (response) {
                            //getting data and append it here
                            $("#bottomLinks").append('<img id="loader" src="/images/loader.svg" style="visibility: hidden; display: block">');
                            $(".blog_loading").css('display','none');
                        }
                    });
                }

            }
            else {
                //console.log('no');
            }
        });

    });

    function isScrolledIntoView(elem)
    {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
        var elemTop = $(elem).offset().top;
        return ((elemTop <= docViewBottom) && (elemTop >= docViewTop));
    }
</script>

如何修复此问题以停止将其记录到控制台

最佳答案

如果您说“elem”并不总是在页面上,则可以将 isScrolledIntoView 函数更改为:

function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();
    if ($(elem).length) {
        var elemTop = $(elem).offset().top;
        return ((elemTop <= docViewBottom) && (elemTop >= docViewTop));
    }
    return false;
}

关于JavaScript:滚动并获取项目位置会触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125506/

相关文章:

javascript - 使用 JQuery 增加 <td> 中的数字

javascript - 如何扩展 Eslint 以与 create-react-app 一起使用

javascript - jQuery 根据其他下拉列表的选定值禁用其他下拉列表值

javascript - 无限滚动重复ajax调用

Wordpress - Jetpack 无限滚动 "post-load"事件未触发

javascript - console.log 不会在文档滚动到达末尾时触发

Javascript:如何删除不代表数字的符号

javascript - IE6 兼容方式通过 Javascript 将上传的文件发送到 API

python - 使用 django 无限滚动

javascript - Facebook 是如何实现无限滚动的?