[英]JavaScript getting stuck in a loop?
我正在尝试执行一个简单的动画,希望在成功返回AJAX调用后发生这种动画。
$('#result').click(function(){
$(document).ajaxSuccess(function(){
$('html, body').on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove", function(){
$('html, body').stop();
});
$('html, body').animate({
scrollTop: $('#result').position().top
}, 500, function(){
$('html, body').off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove");
});
});
});
问题是,有时(并非总是)动画似乎不希望退出,因为如果用户尝试滚屏,动画会引起剧烈运动并不断返回div的顶部。 当我删除ajaxSuccess要求时,不会发生此问题。 有任何想法吗?
无需通过使用stop()函数来停止鼠标滚轮,滚动等移动。
动画功能在到达文档顶部之前不会受到干扰。
这样可以:
$('#result').click(function(){
$(document).ajaxSuccess(function(){
$('html, body').animate({
scrollTop: $('#result').position().top
}, 500);
});
});
每次用户单击#result
时,您都将附加一个新的ajaxSuccess
回调。
这意味着,如果用户单击#result
N次,则每当ajax请求成功完成时,将附加N个不同的函数来执行。 并且每个函数都会尝试为$('html, body')
设置动画
解决方案:将代码移出$('#result').click
函数或在绑定新的处理程序之前取消绑定以前的处理程序。
这是正在发生的事情的简化示例。 尝试依次单击两个按钮:
$("#one").click(() => { console.log("Clicked First") $("#two").click(() => console.log("Clicked Second")); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id=one>First</button> <button id=two>Second</button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.