jQuery滚动到元素不工作

jQuery滚动到元素不工作,jquery,scroll,Jquery,Scroll,我正在使用两列组合日历/事件页面。我已经设法使一些滚动工作(自动滚动到当前事件/月份;通过单击日历中的事件摘要滚动到事件详细信息),但由于某些原因,我似乎无法使上/下滚动对任一列都起作用。我正在上一个/下一个选择器上设置一个“.current”类,它可以工作。。但是滚动是不可能的。也没有得到任何错误 这条线路肯定出了问题 container.animate({ scrollTop: $('.current').offset().top - contai

我正在使用两列组合日历/事件页面。我已经设法使一些滚动工作(自动滚动到当前事件/月份;通过单击日历中的事件摘要滚动到事件详细信息),但由于某些原因,我似乎无法使上/下滚动对任一列都起作用。我正在上一个/下一个选择器上设置一个“.current”类,它可以工作。。但是滚动是不可能的。也没有得到任何错误

这条线路肯定出了问题

container.animate({
    scrollTop: $('.current').offset().top -
                  container.offset().top +
                  container.scrollTop()
}, 500)
我很确定我只是忽略了一些简单的事情,但如果有人对什么有什么建议,我将非常感激

更新: 我已经设法找到了上/下滚动不工作的问题。我引用了错误的选择器

然而,我现在遇到了一个新问题。第一次单击(向上或向下)时,尽管类“current”设置正确,但不会滚动任何内容。第二次单击(同一方向)时,内容会滚动,但列表永远不会到达第一个/最后一个项目。在相反方向单击时,列表将继续沿-上一个-方向滚动一次,然后继续沿正确方向滚动

我希望我的描述没有引起混乱:)试试小提琴,你可能会明白我的意思


更新的代码可以在上找到。

它并不完美,但这里有一个起点:

我已经更改了html,因此对我来说更有意义:

  <div id="events-container">
        <div id="events-detail">
            <div class="container"></div>
            <div class="nav"></div>
        </div>
        <div id="events-overview">
            <div class="container"></div>                                    
            <div class="nav"></div>
        </div>
    </div>

如果在
警报(scrollTo.offset().top+'、'+container.offset().top+'、'+container.offset().top+'、'+container.scrollTop())的
If
else If
中放置警报
您将看到,即使对象在第一次单击时没有移动,
scrollTo.offset().top
从第一次单击更改为第二次单击。我不知道为什么,但不知道。在我比较了第一次和第二次单击之间的差异并查看了对象的CSS之后,我发现第一次和第二次单击之间的差异是对象的高度+它的边距底部(您唯一的垂直边距)

因此,我只是简单地改变了路线

container.animate({
    scrollTop: scrollTo.offset().top - container.offset().top + container.scrollTop()
}, 300);


使用警报,尤其是可变值警报,对于调试非常有用

谢谢!我会试试看的,很好。。你的零钱很好用!仍然有一个小问题,在我实现这个脚本的页面中,它并没有完全滚动到每个框的确切顶部,但我会设法找出其中一个。我也同意,提醒是一种方式。这可能是由于方框上的其他CSS属性影响其垂直位置,如
边距顶部
或类似属性
container.animate({
    scrollTop: scrollTo.offset().top - container.offset().top + container.scrollTop()
}, 300);
container.animate({
    scrollTop: scrollTo.height() + parseInt(scrollTo.css('margin-bottom')) + scrollTo.offset().top - container.offset().top + container.scrollTop()
}, 300);