2014-04-10 73 views
0

我想讓側邊欄停留在熱門帖子div上面的粉色類別欄20px以下。目前,下面的代碼會停止邊欄中頂部div的邊欄。有沒有一種方法可以改變這個代碼,所以它停在最後的div(熱門帖子)呢?使側邊欄停在某個div

的JavaScript

/*cache jQueries for performance*/ 
var 
    $archiveTitle = jQuery ("#archive-title"); 
    $content = jQuery ("#content"), 
    $categoriesBar = jQuery ("#categories-bar"), 
    $loadMore = jQuery ("#load-more"), 
    $footer = jQuery ("#footer-menu"), 
    $sidebar = jQuery ("#sidebar"), 
    $window = jQuery (window), 
    doSidebarAdjust = false; // only do sidebar adjustments if the DOM is stable 

function isMasonryPage() { 
    return $loadMore.length > 0; 
} 
function isMasonryStable() { 
    return $loadMore.hasClass ("disabled"); 
} 
function isSidebarAbove (threshold) { 
    return $window.scrollTop() >= threshold; 
} 
function isSidebarBelowFooter() { 
    var 
     categoriesBottom = $categoriesBar.offset().top + $categoriesBar.height(), 
     sidebarHeight = $sidebar.height(), 
     footerTop = $footer.offset().top; 
    return categoriesBottom + sidebarHeight + 50 >= footerTop; 
} 
function canAdjustSidebar() { 
    /* Determine if there's room to adjust sidebar */ 
    var 
     archiveTitleHeight = $archiveTitle.length === 1 ? 
      $archiveTitle.outerHeight() : 0; 
     answer = $content.height() - 50 > 
      ($sidebar.outerHeight() + archiveTitleHeight); 
    return answer; 
} 
function adjustSidebar (threshold) { 
    if (isMasonryPage()) { // can lock to top 
     if (isMasonryStable()) { // can lock to top or bottom 
      if (isSidebarBelowFooter()) { 
       $sidebar.removeClass ("fixed").addClass ("bottom"); 
      } else if (isSidebarAbove (threshold)) { 
       $sidebar.addClass ("fixed").removeClass ("bottom"); 
      } else { 
       $sidebar.removeClass ("fixed"); 
      } 
     } else { // masonry not stable but can lock to top 
      if (isSidebarAbove (threshold)) { 
       $sidebar.addClass ("fixed"); 
      } else { 
       $sidebar.removeClass ("fixed"); 
      } 
     } 
    } else if (canAdjustSidebar()) { // not a masonry page but sidebar adjustable 
     if (isSidebarBelowFooter()) { 
      $sidebar.removeClass ("fixed").addClass ("bottom"); 
     } else if (isSidebarAbove (threshold)) { 
      $sidebar.addClass ("fixed").removeClass ("bottom"); 
     } else { 
      $sidebar.removeClass ("fixed bottom"); 
     } 
    } 
} 

if (jQuery(document.body).hasClass("home")) { 
    jQuery (window).scroll(function() { adjustSidebar (654); }); 
} else if (jQuery(document.body).hasClass("single") || jQuery(document.body).hasClass("page")) { 
    jQuery (window).scroll(function() { adjustSidebar (20); }); 
} else { 
    jQuery (window).scroll(function() { adjustSidebar (183); }); 
} 

</script> 

HTML

<div id="wrapper"> 
    <div id="container"> 
    <div id="content"> 
     <div id="sidebar"></div> 
     <div id="masonry"></div> 
    </div> 
    </div> 
</div> 
<div id="footer"></div> 

CSS

#sidebar { 
    margin: 0; 
    right: 0; 
    width: 220px; 
} 
#sidebar.fixed { 
    margin-left: 720px; 
    position: fixed; 
    right: auto; 
    top: 173px; 
} 
#sidebar.bottom { 
    bottom: 0; 
    top: auto; 
    position: absolute; 
} 

回答

0

您是否嘗試更改固定在側邊欄相對位置的位置?

+0

你的意思是把'position:fixed'改爲'#sidebar.fixed'的'position:relative'嗎?我不明白你的意思,因爲它與添加的類相同。 – J82

+0

您是否需要邊欄滾動才能像頁面的其餘部分一樣滾動?我知道你的側邊欄停在導航欄的頂部。那是你想要解決的問題嗎? – Giorgio

+0

是的,我希望側邊欄停留在熱門帖子div而不是簡報,這是側邊欄中的第一個div。 – J82