4 回答
TA贡献1875条经验 获得超3个赞
.scroll我用 jQuery 和函数完成了它,并像这样使用了 ajax,也许我的代码可以帮助您并使其适应您的需求。
$('#customersList').scroll(function () {
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight - 5000) {
// Do your stuff here.
getCustomers();
}
})
function getCustomers(){
let $customerList = $('#customersList');
let offset = ($customerList.attr('data-offset')) ?
$customerList.attr('data-offset') : 0;
if ($customerList.data('requestRunning')) {
return;
}
$customerList.data('requestRunning', true);
return $.ajax({
type: "GET",
data: {offset: offset},
url : routes.routes.customers.get
})
.done(function (data) {
let _htmlCustomersList = ($customerList.is(':empty')) ? '' : $customerList.html();
let response = data.data;
if (response) {
for (const i in response) {
let v = JSON.parse(response[i]);
_htmlCustomersList += '<div class="client-group edit" data-id="' + v['id'] + '"></div><hr>';
}
offset = parseInt(offset) + 200;
$customerList.attr('data-offset', offset).html(_htmlCustomersList);
}
})
.always(function () {
$customerList.data('requestRunning', false);
});
}
我的 getCustomer 函数在到达页面末尾之前运行,并且每次加载 200 个以上的项目。
我希望这可以帮助你一点点
TA贡献1906条经验 获得超10个赞
#result div 是内容的主要包装器,使用 innerHTML 更新 div 的内容,将导致替换 div 内的整个内容...
除了 innerHTML 是绝对的,并且会删除任何 DOM 对象(及其事件)因此是不好的做法这一事实之外,它也不是一个好的解决方案,因为您希望在滚动时附加而不是替换数据
我建议在分页上方添加一个 div,它将保存添加的数据,例如:
...
<div id="result"></div>
<div class="alert alert-light text-dark text-center border mx-3 my-3" id="paginate">
More results
</div>
然后对添加的内容使用某种附加,例如:
.then((html) => {
let res = new DOMParser().parseFromString(html, "text/xml");
document.getElementById("result").appendChild(res);
});
希望有帮助
TA贡献1796条经验 获得超4个赞
我已将其删除innerHTML
并替换为insertAdjacentHTML
.
因为似乎在第一次刷新后innerHTML
重置/忘记了,所以无法再检测到触发下一次刷新。#paginate
#result
observer
#paginate
#result
我本可以使用innerHTML
withappendChild
来做同样的事情,但每次刷新appendChild
都会添加一个新的,我不太喜欢。div
#result
作为解决方案,我html
在开始之前插入刷新的数据#paginate
而不重置/忘记它是触发下一次刷新id
所需的元素。observer
#result
.then((html) => { paginate.insertAdjacentHTML('beforebegin', html); });
添加回答
举报