jQuery-每个特定滚动位置一个触发器
jQuery - One trigger per each certain scroll position
这有点难以解释。我对无限滚动功能有意见。当我向下滚动我的内容时,在特定的滚动位置,我调用一个函数来在页面上加载我的内容。这个功能是:
var page = 1,
total = 10; // example
$(window).on("scroll", function() {
var search = $(document).scrollTop(),
position = ($(document).height() - (($(".footer").height() * 2) - 50) - $(".page-heading").height() - $(".page-footer").height() - $(".navbar-toalc").height());
if (search > position && page <= total) {
triggerLoad(page);
console.log(page);
page++;
}
});
当我得到某个滚动点时,我会触发函数triggerLoad()
,其中是ajax调用和隐藏最后一页按钮的函数。那部分做得不错。
问题:
上面的函数立即使所有页面循环。我需要一些东西来延迟循环,直到加载新内容、测量页面并等待滚动到新位置。Measuremant运行良好,但在加载内容之前,我有8个滚动调用,这就形成了一个循环。
一个非常简单的方法是"检查"您是否已经在执行triggerLoad
例如,页面上有一个类,它表示正在加载,或者在加载时使用布尔变量true,然后使用ajax完整的回调函数重置为false
var page = 1,
total = 10, // example
isLoading = false; // <<-------
$(window).on("scroll", function() {
var search = $(document).scrollTop(),
position = ($(document).height() - (($(".footer").height() * 2) - 50) - $(".page-heading").height() - $(".page-footer").height() - $(".navbar-toalc").height());
if (search > position && page <= total && isLoading === false) {
isLoading = true;
triggerLoad(page, function(){ isLoading = false; });
console.log(page);
page++;
}
});
记住添加回调函数作为ajax 的完整回调
function triggerLoad(_page, _callback){
// ...
$.ajax({
// ...
complete: _callback
});
// ...
}
这不是一个非常干净的解决方案,但应该可以很好地工作
相关文章:
- 用键盘分页jQuery下一个和上一个控件.触发器('点击')不'不起作用
- jQuery触发器事件在一个循环中多次出现
- 如何为滑块的分页按钮创建简单的下一个和上一个触发器按钮
- 我可以使用一个函数让所有复选框都被选中或取消选中吗(不使用点击触发器)
- 我有一个严重的问题与CRM的触发器,正在开发与GAS
- GAS-onChange触发器(获取值)从活动表和写入另一个电子表格
- 有什么方法可以放置一个触发器来在 CodeIgniter 的控制器函数中切换引导模式
- 一个苹果叠加层用于多个触发器
- 如何检查该元素是否在网页屏幕上,当有人滚动到该元素时,我也想要一个触发器
- Firebase-javascript API 仅在一个触发器中获取满足条件的数据节点.还会为每个查询建立新的 TCP
- 如何确保一个函数在另一个函数之后获得触发器
- 一个模式有多个按钮(触发器)
- 取消绑定具有相同触发器的两个jQuery函数中的一个
- 另一个触发器完成后触发点击事件
- jQuery-每个特定滚动位置一个触发器
- JQuery-事件委托系列中的最后一个事件处理程序触发器
- AngularJS:如何在一个控制器中用触发器改变另一个控制器的作用域
- Jquery:为什么如果我有一个Jquery触发器在其他,第二个当发生多次
- 任何方法,使一个触发器或按钮,让用户按下和运行,而不是去脚本编辑器
- 我如何使一个jquery styleBox触发器聚焦时使用标签