【发布时间】:2016-06-01 15:01:42
【问题描述】:
我从 api 中获取数据,点击窗口滚动,即当用户在页面上达到 95% 时。问题是多个 api 命中被触发。
我假设这是由于 js 调用的异步特性,并且每次用户向下滚动时都会多次调用窗口滚动。
我确实放了一个变量“taskFired”来检查并仅在 API 命中逻辑尚未执行时才允许它。但是当用户向下滚动时,我得到 4-5 次 api 命中而不是 1 次。我无法找出原因。
代码如下:
//变量来检查我们是否已经点击了api或者现在已经达到了95%。默认为false。
var taskFired = false;
//滚动事件
$(window).scroll(function (evt) {
if (!taskFired) { //allow to check and hit api if taskFired is false
$.when(_self.scrollApiHit()).then(function () {
taskFired = false; //reset variable when api hit done
});
}
});
_self.scrollApiHit = function () {
var wintop = $(window).scrollTop(), docheight = $(document).height(), winheight = $(window).height();
var scrolltrigger = 0.95;
if ((wintop / (docheight - winheight)) > scrolltrigger) {
taskFired = true;
//API HIT
}
};
我什至尝试设置 setTimeout,但即使这样也不起作用:
setTimeout(function () {
if (!taskFired) {
$.when(_self.scrollApiHit()).then(function () {
taskFired = false;
});
}
},1000);
【问题讨论】:
标签: jquery scroll infinite-scroll