gpt4 book ai didi

javascript - 收集适当的 onScroll 数据来触发 AJAX 功能

转载 作者:行者123 更新时间:2023-12-02 19:20:32 25 4
gpt4 key购买 nike

我在滚动时调用 AJAX 函数:

// Collecting scroll info
$('.overthrow').each(function() {

var self = this;
var path2root = ".";
var subcategoryId = $(this).attr('data-subcategoryId');
var page = 1;

$(this).bind('scroll', function() {

var scrollAmount = $(self).scrollLeft();
var documentWidth = $(self).data('currentElementPosition') || $(document).width();
var scrollPercent = (scrollAmount / documentWidth) * 100;

if (scrollPercent > 80) {

page++;

console.log("process.php?subcategoryId=" + subcategoryId + "&page=" + page);

// AJAX function for processing JSON
$.ajax({
url: "process.php?subcategoryId=" + subcategoryId + "&page=" + page,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
for(i = 0 ; i < data.length; i++) {
var articleId = data[i].articleResult.articleId;
var title = data[i].articleResult.title;
var subhead = data[i].articleResult.subhead;
var image = data[i].articleResult.image;
var response = "<td><div class='articleResult'><a href='" + path2root + "/article/article.php?articleId=" + articleId + "'><img src='" + image + "' width='120'/></a><br><h3><a href='" + path2root + "/article/article.php?articleId=" + articleId + "'>" + title.substring(0,25) + "</a></h3></div></td>";

var appendedData = $(self).find("table tbody tr td:last-child").after(response).fadeIn('slow');
$(self).data('currentElementPosition', appendedData.position().left);
};
}
});
};
});
});

我的问题是,一旦第一个响应被附加到内容中,并且我开始滚动超过 80% 进入新结果,我滚动的每个像素都会一次又一次地调用相同的 AJAX 函数,而不是等待用户滚动新窗口大小的 80% 宽度。对滚动超过 80% 的每个像素有效地进行 AJAX 调用。

使用 if 语句来处理这样的事情是错误的吗?我是否应该提供某种类型的回调来动态驱动触发 AJAX 函数的整数?

最佳答案

另一种方法是保存对 AJAX 调用结果附加到 DOM 的任何内容的引用,获取其位置,并将滚动位置与该位置进行比较。换句话说,假设在上面的示例中,$(this) 是插入通过 AJAX 返回的所有数据的父容器,您可以执行如下操作:

$(this).scroll(function () {
var scrollAmount = $(this).scrollLeft();
var documentWidth = $(this).data('currentElementPosition') || $(document).width()
var scrollPercent = (scrollAmount / documentWidth ) * 100;
if (scrollPercent > 80) {
// AJAX function success
var appendedData = $(data_returned_from_ajax_call).appendTo($(this))
$(this).data('currentElementPosition', appendedData.position().left)
};
});
}

仅供引用,需要注意的重要一点是 jQuery 的 .offset() 方法将为您提供元素相对于文档的位置,而 .position() 将为您提供相对于其父容器的位置。

关于javascript - 收集适当的 onScroll 数据来触发 AJAX 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com