【问题标题】:How to move an element to just below a fixed header如何将元素移动到固定标题下方
【发布时间】:2013-06-20 01:03:50
【问题描述】:

我正在尝试将每个<li> 移动到onClick() 上的屏幕顶部,并且它使用scrollIntoView(); 工作,但是因为我的标题是固定的,所以<li> 的一小部分位于标题下方。如何将<li> 滚动到标题下方。

HTML

    <header></header>
<div id="wrapper">
   <ul>
       <li id='li1' onClick="moveup(1)"> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
         <li id='li2' onClick='moveUp(2)'> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
       <li id='li3' onClick='moveUp(3)'> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
        <li id='li4' onClick='moveUp(4)'> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
        <li id='li1' onClick='moveUp(1)'> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
       <li id='li5' onClick='moveUp(5)'> blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
           blah blah blah blah blah <br/>
       </li>
       </ul>   
</div> <!--end wrapper-->

css

header {
    position: fixed;
    top: 0;
    right: 0;
    left: 0;
    height: 50px;
    background-color: red;
}

#wrapper {
    width: 1000px;
    background-color: blue;
    height: 100%;
    margin: 0 auto;
}

#col1 {
 background-color: green;
    height: 100%;
    width: 80%;
    margin: 0 auto;
}

ul {                    
    margin: 0 auto;
    width: 500px;
    display: block;
}

li {
     display: block;
    background-color: yellow;
    height: 500px;
    width: 500px;  
    margin-bottom: 5px;
}

JAVASCRIPT

function moveup(x){
   document.getElementById('li'+x).scrollIntoView();
}

http://jsfiddle.net/Jn74M/2/

谢谢。

【问题讨论】:

    标签: javascript viewport offset scrolltop


    【解决方案1】:

    scrollIntoView() 之后,将其下推 50 像素,使用如下方式:

    scrollBy(0, -50);
    

    【讨论】:

    • 其他单位可以这样做吗? (rempt等)
    【解决方案2】:

    而不是onClick 使用onclick。你也将函数定义为moveup,但调用moveUp

    使用 jQuery 可以轻松实现您需要的功能。检查这个http://jsfiddle.net/alekperos/Jn74M/3/

    HTML

    <header></header>
    
      <div id="wrapper">
         <ul>
             <li id='li1'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
               <li id='li2'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             <li id='li3'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
              <li id='li4'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             <li id='li5'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             </ul>   
      </div> <!--end wrapper-->
    

    JS

    // on click of list element
    $('li').click(function(){
       // scroll the window in the amount of position of current clicked list element
       // minus 
       // the amount that corresponds to the height of the header
       $(window).scrollTop($(this).position().top - $('header').height())
    })
    

    【讨论】:

      【解决方案3】:

      我已经修复了您的示例,因此它可以工作:[jsfiddle.net/t3go7b0u/4][1] 我知道这个问题很老,您可能已经解决了它......但记录在案。更改:位置:在标题和固定/粘性元素滚动插件上粘 [smartScroll][2]

      变化:

         header {
            position: fixed;
         }
      
         $('#li' + x).smartScroll("start");
      

      function moveUp(x){
         // document.getElementById('li'+x).scrollIntoView();
         // https://github.com/webdevelopers-eu/DNA-Smart-Scroll
         $('#li' + x).smartScroll("start");
      }
      header {
          position: sticky;
          top: 0;
          right: 0;
          left: 0;
          height: 50px;
          background-color: red;
      }
      
      *[onclick] {
        cursor: pointer;
      }
      *[onclick]:hover {
        outline: 2px solid orange;
        opacity: 0.5;
      }
      
      #wrapper {
          width: 1000px;
          background-color: blue;
          height: 100%;
          margin: 0 auto;
      }
      
      #col1 {
       background-color: green;
          height: 100%;
          width: 80%;
          margin: 0 auto;
      }
      
      ul {                    
          margin: 0 auto;
          width: 500px;
          display: block;
      }
      
      li {
           display: block;
          background-color: yellow;
          height: 500px;
          width: 500px;  
          margin-bottom: 5px;
      }
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      
      <script src="https://cdn.rawgit.com/webdevelopers-eu/DNA-Smart-Scroll/main/jquery.smartscroll.js"></script>
      
      <header></header>
      <div id="wrapper">
         <ul>
             <li id='li1' onClick="moveUp(1)"> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
               <li id='li2' onClick='moveUp(2)'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             <li id='li3' onClick='moveUp(3)'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
              <li id='li4' onClick='moveUp(4)'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
              <li id='li1' onClick='moveUp(1)'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             <li id='li5' onClick='moveUp(5)'> blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
                 blah blah blah blah blah <br/>
             </li>
             </ul>   
      </div> <!--end wrapper-->
      
      
        [1]: https://jsfiddle.net/t3go7b0u/4
        [2]: https://github.com/webdevelopers-eu/DNA-Smart-Scroll
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        相关资源
        最近更新 更多