[英]how to do one time trigger click with window.scroll jquery?
这是我的js代码,用于从数据库加载更多帖子的按钮。
.getmore
是按钮的类。 现在,我想进行无限滚动,以便用户无需单击该按钮。
所以我添加了window.scroll
函数:
$('.getmore').trigger("click");
但一次点击3次。 手动单击该按钮时,它可以正常工作。 但是使用滚动触发器,它会获得三倍的效果。
$(document).ready(function(){
$(window).scroll(function(){
if ($(window).scrollTop() + $(window).height() > $(document).height() - 300) {
$('.getmore').trigger("click");
}
});
$('body').on('click','.getmore',function(){
var lastelement = $(this).attr('id');
$.ajax({
type: 'GET',
url: 'getmore.php',
data:'lastelement='+lastelement,
beforesend: function(){
$('.getmore').html('loading....');
},
success: function(data){
$('.getmore').remove();
$('#recs') .append(data) ;
}
});
});
});
如MDN所述:
由于滚动事件可以以很高的速度触发,因此事件处理程序不应执行计算量大的操作,例如DOM修改。 相反,建议使用requestAnimationFrame,setTimeout或customEvent限制事件
他们提出的基本方法是检查事件状态的全局变量。 对于您的示例,您可以保存一个名为fetching
的全局变量,该变量在用户滚动时设置为true
,而在success
回调中完成新数据的获取后则设置为false
。 最后,如果fetching
为true
,则不允许“单击” .getmore
。
阅读文档以获取更多信息: https : //developer.mozilla.org/en-US/docs/Web/Events/scroll
尝试这个 :
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()){
$('yourbuttonIDorClass').trigger('click');
}
});
遇到此类问题的典型方法是使用推论来排除导致问题的原因:。
排除.getmore类中有多少个元素。
console.log($('.getmore').length);
//Add this line under the .trigger('click');
如果大于1,则可能是您的问题。
排除调用窗口滚动回调的次数。
console.log('Scroll called');
//Add this line at the start of your $(window).scroll function.
如果滚动被调用了3次,这可能是您的问题
检查您采用的事件委派方法不会引起任何奇怪的问题。
将$('body').on('click', '.getmore', function() {}
替换$('.getmore').click(function() {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.