我有一个POST
请求,根据用户通过number inputs
可调的参数,从服务器中提取数据。仅仅侦听change
事件是不够的,因为我希望在使用鼠标轮更改输入值时刷新数据。
用这样的方式调用我的刷新函数显然不是最优的:
$('input').on('mousewheel', function(){
refresh_data();
});
会有很多请求,因为它们是异步的,所以我永远不知道最后要完成的请求是否是我发送的最后一个请求。
我目前使用的是一个setInterval
来查看包含请求刷新的间隔(圆形时间戳)的对象。在mousewheel
侦听器中,我向对象添加下一个间隔,作为属性/键,以避免重复。
就像这样:
var i = 100;
var obj = [];
$('input').on('mousewheel', function(){
// add next interval to obj;
obj[Math.ceil(Date.now()/i)*i] = true;
});
var check = setInterval(function(){
// refresh if current interval is in obj
var t = Math.floor(Date.now()/i)*i;
if(obj[t]){
delete obj[t]; // remove from obj
refresh_data();
}
}, i);
我在我的机器上用i=50
测试了这段代码,对象总是空的,这正是我们想要的,但是使用i=30
,一旦我太快地使用轮子,我就会看到对象中积累了一些旧的时间间隔。这是由setInterval
跳过节拍引起的,因此无论我为i
选择什么值,一些CPU较少的用户都可能“跳过错误的节拍”,并最终看到不匹配参数值的鼠标轮移动。
我觉得可能是我让事情变得更复杂了,所以我想问:
考虑到从服务器鼠标轮上提取数据的最好方法是什么::
1:当用户在输入字段上滚动轮子时,我希望不断地刷新数据。
2:我想成为100%,确定提供的数据后的车轮运动总是精确的。
发布于 2020-02-17 10:08:59
尝试像下面的代码那样使用文档偏移值。这将在用户向下滚动并到达滚动结束时工作。这种行为有点像回收者对android的看法。
window.onscroll = function(ev) {
if ((window.innerHeight + window.pageYOffset ) >=
document.body.offsetHeight) {
alert("you're at the bottom of the page");
}
};
https://stackoverflow.com/questions/60268064
复制相似问题