一个解决方案是设置一个锁定机制来停止对后端的快速请求。在发出请求之前将启用锁定,然后当请求完成并且DOM已更新新内容(扩展了页面大小)时,锁定将被禁用。
例如:
new Vue({
// ... your Vue options.
ready: function() {
var vm = this;
var lock = true;
window.addEventListener('scroll', function() {
if (endOfPage() && lock) {
vm.$http.get('/myBackendUrl').then(function(response) {
vm.myItems.push(response.data);
lock = false;
});
};
});
};
});
另一件事要记住的是,scroll
事件触发超过你真的需要它(特别是在移动设备上),并且可以扼杀这种情况下,以提高性能。这能够高效地完成:
;(function() {
var throttle = function(type, name, obj) {
obj = obj || window;
var running = false;
var func = function() {
if (running) { return; }
running = true;
requestAnimationFrame(function() {
obj.dispatchEvent(new CustomEvent(name));
running = false;
});
};
obj.addEventListener(type, func);
};
/* init - you can init any event */
throttle ("scroll", "optimizedScroll");
})();
// handle event
window.addEventListener("optimizedScroll", function() {
console.log("Resource conscious scroll callback!");
});
来源:https://developer.mozilla.org/en-US/docs/Web/Events/scroll#Example
你能与您到目前为止已经试过什么编辑您的帖子? –
@ThomasKim完成 – aFreshMelon
您可以在vue实例中设置一个布尔值。 'isFetching = false;'。然后,如果'isFetching'为false,则只能获取数据。您在获取数据时将其设置为true,并在数据获取后将其设置为false。 –