javascript - JavaScript:滚动和获取项目位置触发错误
问题描述
我正在检查页面底部是否可见元素以应用滚动自动分页。它工作正常并且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;
}
推荐阅读
- excel - 如果另一个范围包含特定文本,如何对来自两个范围的数据求和
- wordpress - Wordpress 的新 Gutenberg 中的自定义模板页面
- javascript - 电报机器人(telegraf.js 库)将消息从一个通道方法转发到另一个通道方法?
- c# - 什么Android是蓝屏?
- reactjs - React Hooks 如何使用Callback“冻结”闭包?
- apache-spark - Spark Streaming、Structured Streaming 和 Kafka Streaming 是一回事吗?
- bash - 我可以使用 cut 来设置变量吗?
- google-cloud-platform - 为什么在列出 BQ 作业时使用 VM 实例中的服务帐户
- windows - 在 Windows 中设置特定于进程的权限
- reactjs - 有没有加速 React src 代码编译的工具?