代码之家  ›  专栏  ›  技术社区  ›  7wp

滚动页面时保持页面元素在视图中

  •  1
  • 7wp  · 技术社区  · 15 年前

    我正在寻找一个解决方案来保持一个元素在视图中,同时滚动页面的其余部分。

    我不想重新发明轮子,所以我要去看看社区是否已经知道一个现成的解决方案。

    我想把它应用到我拥有的一个巨大的表中,我希望用户能够在向下滚动时继续看到表头。

    只是澄清一下,我要找的不同于可滚动的表格 使用溢出的CSS设置。我不能使用可滚动表的原因是该方法在处理数千行时变得非常慢。同样,这种方法在iPhone浏览器上也不能很好地工作。

    理想情况下,我希望这样,当用户向下滚动页面时,表标题将“粘”在浏览器视图的上边缘。相反,如果用户向上滚动,它将继续停留在那里,直到它回到头开始的原始位置。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Thomas daign    10 年前

    你在找 #element { position: fixed; ... } ?可以使用JS在固定、相对和绝对之间切换。

    http://www.w3schools.com/cssref/pr_class_position.asp

    编辑

    看看他们是怎么做的[希望他们不介意] http://www.zocdoc.com/search.aspx?dr_specialty=98&address=Enter+a+City+and+State%2C+or+Zip&insurance_carrier=-1&insurance_plan=-1&button.x=166&button.y=21

    他们使用jquery,它看起来并不复杂,而且他们还有一个IE6解决方案

    $(function() {
        var msie6 = $.browser.msie && $.browser.version < 7;
        if (!msie6) {
            var top = $('#scroll_header').offset().top
                    - parseFloat($('#scroll_header').css('margin-top').replace(
                            /auto/, 0));
            $(window).scroll(function(event) {
                var y = $(this).scrollTop();
                if (y >= top) {
                    $('#scroll_header').addClass('fixed');
                } else {
                    $('#scroll_header').removeClass('fixed');
                }
            });
            var y = $(this).scrollTop();
            if (y >= top) {
                $('#scroll_header').addClass('fixed');
            } else {
                $('#scroll_header').removeClass('fixed');
            }
        } else {
            setInterval("checkScroll()", 100);
        }
    });
    function checkScroll() {
        ie6top = $('#scroll_header_wrapper').offset().top;
        if ($(document).scrollTop() > ie6top) {
            $('#scroll_header').css("top", $(document).scrollTop() - ie6top + "px");
            $('#scroll_header').css("visibility", "visible");
        } else {
            $('#scroll_header').css("visibility", "hidden");
        }
    }