javascript - 如何停止滚动延迟到父滚动条

标签 javascript jquery html css scroll

我有一个父容器,它被设置为 overflow: auto: 和它里面的一个容器 overflow: auto。当我将鼠标悬停在子滚动容器上时,我只想滚动该容器,而不是父容器,反之亦然。

但目前,当我向下滚动页面时,父容器滚动到子容器,然后开始滚动子容器,然后在子容器完成滚动时推迟回到父容器。有办法避免这种情况吗?

这是我的例子:

<div class="parent">
    <div>Outter text</div>
    <div>Outter text</div>
    <div>Outter text</div>
    <div>Outter text</div>
    <div>Outter text</div>
    <div>Outter text</div>
    <div class="scroll-container">
        <ul>
            <li>Stuff</li>
            <li>Stuff</li>
            <li>Stuff</li>
            <li>Stuff</li>
            <li>Stuff</li>
            <li>Stuff</li>
            <li>Stuff</li>
        </ul>
    </div>
    <div>Outter text</div>
    <div>Outter text</div>
    <div>Outter text</div>
</div>

和我的 CSS:

.parent {
    height: 100px;
    overflow-y: auto;
    border: 1px solid black;
}

.scroll-container {
    height: 35px;
    overflow-y: auto;
    color: red;
}

您会在这个 jsFiddle 中注意到当您向下滚动到 scroll-container 时,滚动将首先从 parent 开始(这是预期的,因为鼠标悬停在 scroll-container),但是当它到达底部时会延迟返回到 parent(这是我想要防止的)。

我不反对使用 jQuery/javascript,但我想尽可能避免。

最佳答案

看起来很乱,但似乎可以解决:

DEMO jsFiddle

(function () {
    var scrollTop;
    $('.scroll-container').attr('tabindex', -1).css('outline', 'none');
    $('.parent').on('scroll', function () {
        var $scrollContainer = $(this).find('.scroll-container');
        if ($scrollContainer.is(':focus, :hover')) {
            this.scrollTop = scrollTop;
        }
    });
    $('.scroll-container').on('focus mouseenter', function () {
        scrollTop = $(this).closest('.parent').scrollTop();
    });
}());

关于javascript - 如何停止滚动延迟到父滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21939615/

相关文章:

html - Position: absolute 和 parent 高度?

没有jquery的javascript淡化文本onmouseover

javascript - 如何使用 javascript 模拟鼠标点击(在 Google map 中)?

javascript - 从 JQuery 中的输入数组获取正确的索引

javascript - 每 4 "thumb divs"创建新行

ios - iOS 应用程序上的 HTML 输入文件,禁用 "take photo"选项

html - 在 ul li 中添加 sup 标签进入下一行

闭包中的 Javascript 实例化。如何让Factory和Model独立?

javascript - Windows 8 上的 Video.js,即 10。播放头移动但视频不播放

javascript - for 循环并将结果集附加到 div