用 bigSlide 生成的可滑動側邊欄須要更改其定位和高度屬性,更改定位令其與中間內容區域的頂部對齊,更改高度令其與中間內容區域的底部對齊。這個問題能夠拆分爲下面幾個需求來依次實現:css
經過結合 CSS 選擇器,能夠快速定位目標元素,而後利用 offset()
方法的 top
屬性,便可獲得元素頂部與頁面最上方的距離。jquery
var topOffsetToTop = $('div.main-body div.view-tab.learn-tab').offset().top;
參考內容:jQuery: the offset() and position() methodide
因爲側邊欄是相對定位,默認位置緊鄰頂部導航欄,那麼若是要與右側的內容區域頂端對齊,則側邊欄向下移動的距離,就等於內容區域與頁面最上方的距離,減去頁面頂部導航欄的高度。測試
var topNavBarHeight = $('#header').height();
有了中間內容區域頂部與頁面最上方的距離,以及頁面頂部導航欄的高度,側邊欄須要向下移動的距離很容易就算出來了。.net
$('#menu').css("top", topOffsetToTop - topNavBarHeight + 'px');
參考內容:how to remove only one style property with jquery插件
原理與上面更改側邊欄定位的思路相同,中間內容區域頂部的位置已知,那麼只要知道中間內容區域底部的位置,就可以獲得該區域的高度,而後令側邊欄也爲相同高度便可。code
var contentAreaBottomOffsetToTop = $('#thread_view').offset().top + $('#thread_view').height();
var contentAreaHeight = contentAreaBottomOffsetToTop - topOffsetToTop; $('#menu').css("height", contentAreaHeight + 'px');
<script> $(document).ready(function () { ////////////////////////////////// // 設置側邊欄的位置和高度 ////////////////////////////////// // 獲取視頻標題距離頁面頂部距離 var topOffsetToTop = $('div.main-body div.view-tab.learn-tab').offset().top; // 獲取頁面頂部導航欄高度 var topNavBarHeight = $('#header').height(); // 令側邊欄與導航欄之間的距離爲上二者之差 $('#menu').css("top", topOffsetToTop - topNavBarHeight + 'px'); // 計算中間內容區域底部距頁面頂部距離,不含底部pagination var contentAreaBottomOffsetToTop = $('#thread_view').offset().top + $('#thread_view').height(); // 計算中間內容區域高度,不含底部pagination var contentAreaHeight = contentAreaBottomOffsetToTop - topOffsetToTop; // 令側欄高度爲中間內容區域高度 $('#menu').css("height", contentAreaHeight + 'px'); }); </script>
上面這段代碼,最初是放在 <head>
標籤內的尾部的,可是運行頁面發現這段代碼並未生效,在 Firebug 中逐句測試這段代碼時卻又生效了,經提醒應該是代碼未被執行,思考以後認爲應該是代碼在頁面中的位置有問題,以側邊欄插件 bigSlide
做爲關鍵字搜索,發現側邊欄初始化的代碼位於頁面最下方,這樣的話,頁面執行的順序實際上是先用本身的代碼調整了側邊欄的定位和高度,以後又經過 bigSlide
初始化插件,這樣自定義的部分固然不會生效了,將上面的代碼放在側邊欄插件初始化代碼以後,一切OK~~~視頻