【问题标题】:how use sticky sidebar move up when window scroll top窗口滚动顶部时如何使用粘性侧边栏向上移动
【发布时间】:2015-02-11 12:46:46
【问题描述】:

仅当侧边栏底部位于窗口底部时才会粘贴的粘性侧边栏 我得到了这个网站 (got to bootstrap sticky example)

javascript

$(function() {
    var win = $(window);
    var doc = $(document);
    var wh = win.height();
    var dh = doc.height();
    var sidebar = $('.rightside .stickybar');
    var sot = sidebar.offset().top;
    var sh = sidebar.height();
    var elementToBottom = dh - sot - sh;
    // reset the sidebar width
     var wt = sidebar.width();
     sidebar.width(wt);
    win.scroll(function(){
    var dst = doc.scrollTop();
    var scrollBottom = dh - dst - wh;
   if(scrollBottom <= elementToBottom) {
      sidebar.addClass('fixToBottom');
  } else {
     sidebar.removeClass('fixToBottom');
    }
   });
});

css

 .fixToTop {
   position: fixed;
   top: 50px;
  }
 .fixToBottom {
    bottom: 60px;
    position: fixed;
 }

html

   <header> </header>
     <div class="contents">
        <div class = "leftside"> left</div>
            < div class="righside">
           <div class="stickybar">
              // when move scrolling up and down 
            </div>
         </div> 
       </div>
      <footer> footer </div>

我有一个 2 列布局。左栏比侧栏长得多。我希望侧边栏仅在其底部到达浏览器窗口底部时才粘住。因此,用户可以继续向下滚动左侧栏内容,同时右侧边栏保持不变。我在这里看到了很多棘手的问题,但是这种特殊情况仍然困扰着我。我在左栏中也有一个固定的标题栏,我已经成功地坚持了。

【问题讨论】:

    标签: javascript jquery css


    【解决方案1】:

    看看这个例子,我做了。

    http://www.bootply.com/hVx29SmQ4g

    如果您或任何人有任何问题,请给我发消息,我会尽力解释。然而,我评论了代码,所以它应该很简单。我希望它是你所需要的!


    :::代码:::

    /*
    ===  JS  ===
    ============
    Author:  Kevin Leegsma
    Updated: Feb 10, 2015
    Notes:   Coded for Stack Overflow - re: Sticky Sidebar
    */
    
    /* Base function that waits till rest of site loads and then executes */
    $(document).ready(function () {
        "use strict";
    
        /* activate sidebar, this can also be done as in-line HTML using the following line, instead of the Javascript below */
        /*  <div class = "col-xs-4" id = "rightColumn" data-spy = "affix" data-offset-bottom = "200">  */
        $('#sidebar').affix({
            offset: {
                top: 400  /* both TOP and BOTTOM can be used here, tweek to your own needs */
            }
        });
    
        /*This function gets the WIDTH of the wrapper and maintains it for the SIDEBAR*/
        /*It does this by setting the WRAPPER as the PARENT, it then calls a function to resize the child (SIDEBAR) 
        in this case equal to the parent size.*/
            /*NOTE: Without this function, the AFFIX still works, just doesn't function as nicely as it doesn't follow
            standard Bootstrap grid CSS rules.  */
        $('#sidebar').each(function () {
            var elem = $(this);
            var parentWrapper = $('#sidebarWrapper');
            var childToParentResize = function () {
                var sidebarWidth = $(parentWrapper).width();
                elem.width(sidebarWidth);
            };      
            childToParentResize();
            $(window).resize(childToParentResize);
        });
    
        /* Alert to inform you the SIDEBAR has become fixed, can be removed/commented, just for testing, but helpful for those new to AFFIX */  
        $('#sidebar').on('affixed.bs.affix', function(){
            alert("The left navigation menu has been affixed. Now it doesn't scroll with the page.");
        });
    });
    
    
    
    /* CSS used here will be applied after bootstrap.css
    ===  CSS  ===
    =============
    Author:  Kevin Leegsma
    Updated: Feb 10, 2015
    Notes:   Coded for Stack Overflow - re: Sticky Sidebar
    
    --------------------------------------
    Layout
    -------------------------------------- */
    /* Targets the SIDEBAR once the affix has become active */
    /* Adjust these to cater to your layout settings */ 
    #sidebar.affix{
        top: 10px;
        right: 8.5%;
    }
    
    
    
    /*
    ==============
    ===  HTML  ===
    ==============
    Author:  Kevin Leegsma
    Updated: February 10, 2015
    Notes:   Coded for Stack Overflow - re: how-use-sticky-sidebar-move-up-when-window-scroll-top
    */
    <!-- Main Code -->
    <div class="container" id="main">
      <!-- Left column with dummy text -->
      <div class="col-xs-8" id="leftColumn">
        <h1> LEFT COLUMN</h1>
        <h3>With Even More Filler Text!</h3>
        <p>...a bunch of text...</p>
      </div><!--end leftColumn-->
    
      <!-- Right column/sidebar that affixes itself as the window is scrolled -->
      <!-- Stuck within a col-xs-4 parent element, this is because the AFFIX 
    has wonky width controls, they ignore Bootstrap grids and aren't responsive
    with this wrapper and the JS however, it resizes well. --> 
      <div class="col-xs-4" id="sidebarWrapper">
        <div id="sidebar" data-spy="affix">
          <h1> SIDEBAR</h1>
          <h3>With Filler!</h3>
          <small>
            <p>...sidebar text/links...</p>
          </small>
        </div><!--end sidebar-->
      </div><!--end sidebarWrapper-->
    </div><!--end container-->
    

    【讨论】:

    • 另外,你知道在你提供的代码中......你用
      打开一个页脚,然后用
      关闭它。注意你的语法@theinlwin
  • 很高兴听到!应该足够简单以满足您的需求。我在第一个答案中发布的链接,如果您不理解 AFFIX,我会检查它们,它让生活变得轻松,并且让您不必自己破解。
  • 【解决方案2】:

    我现在不在家里的电脑前,如果今晚仍未得到答复,我会举个例子。 但是,如果我正确阅读了您需要的内容,您需要做的就是通过 HTML/CSS 提供一个要修复的元素,即 AFFIX 属性

    <div id="sidebar" data-spy="affix" data-affix-bottom="50">
    

    注意 -> data-affix-bottom 是一个偏移量,因此请调整它以满足您的需要

    或通过 JavaScript $("#sidebar").affix({ 抵消: { 底部:一些值 } } });

    一些有用的链接可以更深入地解释它: http://getbootstrap.com/javascript/#affixhttp://goo.gl/8knwd4(带有滚动侧边栏示例)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多