【问题标题】:Scroll to top of div within a div jquery滚动到 div jquery 中的 div 顶部
【发布时间】:2015-01-22 23:15:52
【问题描述】:

我有一个包含其他几个 div 的 div,我希望能够让单击哪个 div 以滚动到包含 div 的顶部。

我不想简单地滚动到 div 的顶部,即 scrollTop:0,我希望单击哪个 div 以使该 div 滚动到顶部。

使用scrollTop: $(this).offset().top 只给出相对于容器的偏移量,所以不正确,因为它只返回一个相对较小的值。

设置如下:

    <div id="container" style="position:relative; height:400px; width:100%; overflow:auto;"> 
<div id="div1" class="clicker" style="height: 1000px; width 100px; ; background:blue">
        Test
    </div>

    <div id="div2" class="clicker" style="height: 1000px; width 100px; background:green">
        Test 2
    </div>

     <div id="div3" class="clicker" style="height: 1000px; width 100px; background:yellow">
        Test 3
    </div>

</div>

用这个 JS:

$(".clicker").click(function ()
                    {
                    $('#container').animate({
                        scrollTop: WHAT GOES HERE?
                    }, 2000);

            });

这是 jsfiddle:

http://jsfiddle.net/byvL43u6/

干杯

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/10744299/…
  • 不是真的;我不想简单地滚动回容器 div 的顶部,即 scrollTop: 0。我希望单击哪个 div 以使该 div 滚动到顶部。

标签: javascript jquery scroll


【解决方案1】:

需要将容器当前的滚动位置与div的位置结合起来

var container = $('#container');

$(".clicker").click(function () {
    var top = $(this).position().top,
        currentScroll = container.scrollTop();

    container.animate({
        scrollTop: currentScroll + top
    }, 1000);

});

http://jsfiddle.net/ucag9dos/2的演示


本地演示:

$(function() {
  var container = $('#container');

  $(".clicker").click(function() {
    var top = $(this).position().top,
      currentScroll = container.scrollTop();

    container.animate({
      scrollTop: currentScroll + top
    }, 1000);

  });
});
#container {
  position: relative;
  height: 400px;
  width: 100%;
  overflow: auto;
  background: red
}
.clicker {
  height: 1000px;
  width: 100%;
}
#div1 {
  background: blue
}
#div2 {
  background: green
}
#div3 {
  background: yellow
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="container">
  <div id="div1" class="clicker">Test</div>
  <div id="div2" class="clicker">Test 2</div>
  <div id="div3" class="clicker">Test 3</div>
</div>

另一种方法是添加所有先前兄弟的高度。

【讨论】:

    【解决方案2】:

    只需0。

    $(".clicker").click(function () {
        $('#container').animate({
            scrollTop: 0
        }, 2000);
    });
    

    【讨论】:

    • 我不想简单地滚动回到容器 div 的顶部;我希望单击哪个 div 以使该 div 滚动到顶部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多