Fixed header while scroll

前端 未结 2 1872
自闭症患者
自闭症患者 2021-02-11 08:29

I have the header of a table in the middle of a page, but since the page is huge, I want to fix the header to the top of browser while I scroll down for the page...

So

相关标签:
2条回答
  • 2021-02-11 08:47

    Let me explain as to how this could be done.

    Steps

    1. Find your table header, and save its position
    2. Add a listener to the window's scroll event.
    3. Check the window scroll against your table header position
      1. If the position < window scroll - add a class to fix the table header
      2. Else, reset the css to behave like a normal header.

    I've posted a fiddle that you can find here.

    Code sample

    HTML

    <div class='lots_of_stuff_in_here'> ... </div>
    <table>
        <thead id='my_fixable_table_header'>
            <tr>
                <th>My awsesome header number 1</th>
                <th>My awsesome header number 2</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Content</td>
                <td>Content</td>
            </tr>
            // much more content
        </tbody>
    </table>
    

    Javascript

    // Just so you get the idea behind the code
    
    var myHeader = $('#my_fixable_table_header');
    myHeader.data( 'position', myHeader.position() );
    $(window).scroll(function(){
        var hPos = myHeader.data('position'), scroll = getScroll();
        if ( hPos.top < scroll.top ){
            myHeader.addClass('fixed');
        }
        else {
            myHeader.removeClass('fixed');
        }
    });
    
    function getScroll () {
        var b = document.body;
        var e = document.documentElement;
        return {
            left: parseFloat( window.pageXOffset || b.scrollLeft || e.scrollLeft ),
            top: parseFloat( window.pageYOffset || b.scrollTop || e.scrollTop )
        };
    }
    

    0 讨论(0)
  • 2021-02-11 08:50

    You're looking for a horizontally oriented "sticky box" that follows you down the page as you scroll.

    Here is a walkthrough that explains how to create this effect for a sidebar: http://css-tricks.com/scrollfollow-sidebar/

    I modified the code to work with a generic example that spans the width of the page:

    HTML:

    <div class="wrapper">
      <div class="head">HEAD</div>
      <div class="header">Table Header</div>
      <div class="content">Content</div>
      <div class="footer">Footer</div>
    </div>​
    

    CSS:

    .wrapper {
      border:1px solid red;
    }
    .head{
      height: 100px;
      background: gray;
    }
    .header {
      background:red;
      height:100px;
      left:0;
      right:0;
      top:0px;
      margin-top:100px;
      position:absolute;
    }
    
    .content {
       background:green;
       height:1000px;
    }
    
    .footer {
       background:blue;
       height:100px;
    }
    

    jQuery:

    $(function() {
    
        var $sidebar = $(".header"),
            $window = $(window),
            offset = $sidebar.offset(),
            topPadding = 0;
    
        $window.scroll(function() {
            if ($window.scrollTop() > offset.top) {
                $sidebar.stop().animate({
                    top: $window.scrollTop() - offset.top + topPadding
                });
            } else {
                $sidebar.stop().animate({
                    top: 0
                });
            }
        });
    
    });​
    

    ​This will animate the header block into view when you scroll beyond where it originally appears.

    jsFiddle here

    0 讨论(0)
提交回复
热议问题