在不滚动文档的情况下平滑滚动文档的子元素

Smooth Scrolling Child Element of Document without Scrolling Document

典型的平滑滚动有上百万个答案。不同之处在于,我试图让 element2(带有滚动条)在单击 element1 中的 link 时平滑滚动。也许这是不可能的。元素滚动(不慢),不幸的是父 window 也滚动。我将前往 HTML、jQuery 和 CSS...

HTML:

<div class="element1">
<a href="#123">Click to See Listing</a>
<a href="#124">Click to See Listing</a>
<a href="#125">Click to See Listing</a>
</div>

<div class="element2 listings">
<div class="listing" id="123">element contents</div>
<div class="listing" id="124">element contents</div>
<div class="listing" id="125">element contents</div>
etc. etc.
</div>

jQuery:

<script>
    jQ=jQuery.noConflict();
    jQ(document).ready(function(){
        jQ("a").on('click', function(event) {
            if (this.hash !== "") {
                event.preventDefault();
                var hash = this.hash;
                jQ('html, body').animate({
                    scrollTop: jQ(hash).offset().top-100
                }, 800);
            }
        });
    });
</script>

我也试过 jQ('.listings') 而不是 jQ('html, body')

CSS:

.listings {
width:300px;
height:500px;
overflow-y:scroll;
}

您可以使用

$('.listings').animate({
      scrollTop: ($(hash).offset().top + $('.listings').scrollTop())- 20
 }, 800);

问题是当您包含 offset() 时,您还需要包含 scrollContainer 的当前滚动值

附上 fiddle 供参考 https://jsfiddle.net/70b9mry4/