【问题标题】:stop scrolling inside fixed div停止在固定 div 内滚动
【发布时间】:2015-01-13 19:58:54
【问题描述】:

我有 2 个 div(一个是固定的,另一个是相对的) 我正在固定的内部实现滚动行为......与页面一起滚动。我想做的更多是当固定一个里面的div滚动到底部时,这应该停止滚动,只有页面应该继续滚动。 我不知道我是否很清楚,所以我创建了一个fiddle

<style>

body {
  background-color:#dddddd;
  margin: 0;
}

#mainDiv{
    top: 120px;
    max-width: 1024px;
    margin:0px auto;
    background-color:#fff;
}

#leftDiv{
    width: 30%;
    float: left;
    background-color: #DBEAED;
    height: 300px;
    top: 1em;
    z-index: 999;
    position: fixed;
    overflow: hidden;
}
#rightDiv{
    width: 68%;
    padding-left: 2%;
    float: right;
    background-color: #FBE9DD;
}
#filters{
    display: inline-block;
}
</style>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
 <script>
 $(document).ready(function () {
            window.onscroll = scrollFunction;
            function scrollFunction() {
                var doc = document.documentElement, body = document.body;
                var top = (doc && doc.scrollTop || body && body.scrollTop || 0);;

                $('#filters').css("margin-top", -top);
            }
        });
 </script>
<div id="mainDiv">
    <div id="leftDiv">
        <div id="filters">
            <p>XX 1</p><p>XX 2</p><p>XX 3</p><p>XX 4</p><p>XX 5</p><p>XX 6</p><p>XX 7</p><p>XX 8</p><p>XX 9</p><p>XX 10</p><p>XX 11</p><p>XX 12</p>
        </div>
    </div>
    <div id="rightDiv">
        Here is PLP page
        <p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p>
        <p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p>
        <p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p>
    </div>
</div>

我们非常欢迎任何帮助。谢谢 !!! 附言。 X12 应该贴在蓝色区域的末端。

【问题讨论】:

    标签: html scroll fixed sticky


    【解决方案1】:

    如果我理解正确,请使top 的最大值为$('#filters').height()-$('#leftDiv').height(),即您希望过滤器滚动的范围。此外,为了让它能够优雅地改变方向,而不是将#filters 的边距设置为滚动顶部,我们必须在滚动时增加和减少值

    $(document).ready(function () {
        window.onscroll = scrollFunction;
        var filterMargin = 0;
        maxTop = $('#filters').height() - $('#leftDiv').height();
        lastTop = 0;
    
        function scrollFunction() {
    
            var doc = document.documentElement, body = document.body;
            var top = (doc && doc.scrollTop || body && body.scrollTop || 0);
    
            filterMargin = -parseInt($('#filters').css("margin-top"));
    
            var diff = top - lastTop;
    
            filterMargin += diff;
            //make sure the margin value stops when the scrolling stops,
            //otherwise the scrolling physically stops but the value keeps growing
            filterMargin = filterMargin < 0 ? 0 : filterMargin;
            filterMargin = filterMargin > maxTop ? maxTop : filterMargin;
            console.log(top, maxTop, filterMargin, top - lastTop);
            $('#filters').css("margin-top", -filterMargin + 'px');
            lastTop = top;
        }
    
    });
    

    小提琴: http://jsfiddle.net/nfp6fhg6/5/

    【讨论】:

    • 是的,这已经完成了一半。我没有提到(因为我在想很明显)但是如果我滚动到大页面的末尾并再次开始向上滚动,我也希望固定的 div 内的 div 立即滚动,而不是等到到达旧位置停止滚动。
    • 它应该已经在这样做了,是不是在做一些不同的事情>
    • 不,如果我滚动页面底部然后开始向上滚动 id="filter" 的 div 不会立即开始向上滚动。
    • 哦。我不明白你为什么想要那个
    • 因为 div (id="filter") 将是一个菜单,如果我在 div (id="rightDiv") 上有很多内容,那么向上滚动很多内容会令人沮丧再次查看第一个菜单项。
    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2021-04-24
    • 2015-03-17
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多