jQuery滚动到元素,然后单击它

时间:2020-05-29 09:34:54

标签: javascript jquery callback

我目前正在尝试使jQuery滚动到某个元素(在本例中为手风琴项),然后希望它自动打开(单击)。到目前为止,我可以通过jquery animate成功滚动到该项目,但是似乎无法弄清楚在animate功能完成后如何单击它。到目前为止,这是我的代码:

$([document.documentElement, document.body]).animate({
            scrollTop: $("#"+ articleID +"").offset().top
        }, 800).then(function(){
            $("div[id='"+ articleID +"']").click();
        });

变量被定义为函数参数,但其余函数与问题无关。

上面的代码成功滚动到所需的元素,但之后不会单击它。有什么想法可以解决这个问题吗?

2 个答案:

答案 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);