關于stick up

demo

  1. 當頁面滾動時導航條碰觸到窗口頂部會粘貼固定到窗口頂部,當頁面滾下時導航條回到原位
    task-28-1
    2.多個stick up
    task-28-2

思路

最近學習了一下stick up,發現其實這個效果有思路就挺簡單的,然后就開始造輪子了!

1. 什么是stick up呢?

它能讓頁面目標元素 “固定” 在瀏覽器窗口的頂部,即便頁面在滾動,目標元素仍然能出現在設定的位置。此插件可以在多頁面的網站上工作,也能在單頁面上面實現導航功能

2. 原理

  • 倘若如果你需要滾到到一定距離,讓某個元素依然出現在頂部時,我們就需要絕對定位
  • 1.但是當這個元素絕對定位的時候,就會脫離文檔流,其他元素的位置就會受到影響,因此我們需要clone和它一樣的元素(在原本的元素的前面),進行占位,并且讓這個占位元素設置成透明和隱藏,當需要他的時候就讓他顯示出來
    2.同時,絕對定位會影響原本的元素的寬度高度,因此當絕對定位后我們要讓他的寬度高度設置成之前一樣,而它的頂部偏移應該是0,因為要讓元素居于最頂部,而左右的偏移需要和原先的元素一樣
  • 我們需要做判斷,當用戶滾動到一定距離時,讓元素變成絕對定位,因此可以獲取元素原本的偏移數據來做判斷。
    • 用戶滾動的距離>元素頂部的偏移量,我們就需要讓他變成絕對定位,反之也一樣。
  • 我們所需要的工具函數有
  • 是否設置成了fixed,可以設置成一個標記屬性,讓他確定是否fixed
  • 設置成fixed,改變他的CSS,并讓克隆的元素展現出來進行占位
  • 把fixed刪除掉,變回原來一樣

3. 現在讓我們看一下代碼吧!

  • 我們可以利用插件的寫法,這樣以后也可以使用
$.fn.stickup = function(){
 // 1. 聲明變量
      var $cur = $(this), //需要將這個this轉換為jQ對象
          curWidth = $cur.width(),
          curHeight = $cur.height(),
          offsetTop = $cur.offset().top,
          offsetLeft = $cur.offset().left,
// 2. 克隆元素,進行占位
  var $newNav = $cur.clone()
                .css('opacity',0)
                .insertBefore($cur)
                .hide();
//3. 滾動時,判斷是否需要進行定位
 $(window).on('scroll',function(){
       var scrollTop = $(this).scrollTop(); 
       if(scrollTop > offsetTop){
          if(!isFixed()){
            setFixed()            
      }
    }
     else{
        if(isFixed()){
          removeFixed()
      }
    }
})
// 4. 工具函數
function isFixed(){
     return !!$cur.attr('data-fixed') //兩個!!感嘆號是為了轉義,變成布爾值
}
function setFixed(){
    $cur.attr('data-fixed',true)
    $cur.css({
            position:'fixed',
            left:offsetLeft,
            width:curWidth,
            height:curHeight,
            top:0,
            "z-index":999
        )}
      $newNav.show()
}
function removeFixed(){
          $cur.removeAttr('data-fixed')
              .removeAttr('style');
          $newNav.hide()
}
//如果想使用插件的話
('綁定的元素').stickup()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容