我目前正在尝试使jQuery滚动到某个元素(在本例中为手风琴项),然后希望它自动打开(单击)。到目前为止,我可以通过jquery animate成功滚动到该项目,但是似乎无法弄清楚在animate功能完成后如何单击它。到目前为止,这是我的代码:
$([document.documentElement, document.body]).animate({
scrollTop: $("#"+ articleID +"").offset().top
}, 800).then(function(){
$("div[id='"+ articleID +"']").click();
});
变量被定义为函数参数,但其余函数与问题无关。
上面的代码成功滚动到所需的元素,但之后不会单击它。有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
.then()
是一个承诺链。 由于animate()
将不会返回承诺,因此它将无法按预期运行。如果要在发生特定动画之后执行操作,则应将complete
回调函数传递给它。
所以您的最终代码应该是这样的:
$([document.documentElement, document.body]).animate({// The selector should be $(document.documentElement) otherwise it will trigger the click event twice.
scrollTop: $("#" + articleID + "").offset().top
}, 800, function() {
$("div[id='" + articleID + "']").click();
});
注意:正如@ freedomn-m所指出的,应该只有一个选择器来传递animate()
函数。因此,您应将$([document.documentElement, document.body])
替换为$(document.documentElement)
。
答案 1 :(得分:0)
我正在提出一种解决方法。
var t = 800;
$([document.documentElement, document.body]).animate({
scrollTop: $("#"+ articleID +"").offset().top
}, t);
setTimeout(function(){
$("div[id='" + articleID + "']").click();
}, t);