通过单击任意点上的div滚动到特定的div

时间:2018-07-05 11:18:28

标签: javascript jquery html css

我知道这个问题已经回答了,但是我的问题的情况大不相同,因此我将尝试解释一下。如果有人想要更多的解释,我很乐意提供。

我有一个由8个框组成的过滤器栏。

 <div class="filter-box  filter-box--green px-2 pt-3 pb-4" data-box-id="web-dev">
     <img width="60" height="60" src="{!! asset('images/Service-page/Web Development-hover.svg') !!}" alt="Web Dev" />
         <div class="title text-center mt-2 pb-4">
                            Web<br />Development
         </div>

         <div class="arrow">
             <img src="{!! asset('images/Service-page/Green.svg') !!}">
         </div>
  </div>

当我单击该框时,它会根据data-box-id滚动到特定的div

下面是滚动到特定div的JavaScript代码。

    <script type="text/javascript">
    $(document).ready(function() {
        $('.filter-box').on('click', function(e) {
            // console.log(window.scroll)
            var boxId = $(this).attr('data-box-id');

            $('html, body').animate({
                scrollTop: $("#" + boxId).offset().top
            }, 'slow');
        });
    })
</script>

我在这里使用了offset。问题在于,有时光标没有对准目标。我想要实现的是,当我单击过滤器框上的任意位置时,它应该滚动并且光标位置应该在预期的div上。

1 个答案:

答案 0 :(得分:2)

使用Jquery .animate可以平滑滚动到所需元素,请参见示例。

$( "#notelement" ).click(function() {
  $('html, body').animate({
      scrollTop: ($('#element').offset().top)
  },500);
});
#notelement{
  margin-bottom:800px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="notelement">Other element</div>
<div id="element">Scroll to element</div>