微信小程序仿APP section header 懸停效果

美好的心情.jpeg
很多APP都有這么一個效果,列表頭在滾動到頂部時會懸停在頂部,比如在iOS開發(fā)中UITableview設置 style 屬性設置為 Plain ,這個tableview的section header在滾動時會默認懸停在界面頂端。

那么我們怎么在微信小程序也實現(xiàn)這么一個效果呢页衙?
首先寫一個非常簡單列表:

wxml代碼
<view class='header'>這里是header</view>
<view class='section-header'>這是section-header</view> 
<block wx:for="{{testData}}">
  <view class='section-cell'>{{item}}</view>
</block>
wxss代碼
.header {
  height: 300rpx;
  width: 750rpx;
  background-color: bisque;
  margin-bottom: 10rpx;
}

.section-header {
  height: 80rpx;
  width: 750rpx;
  background-color: rebeccapurple;
}

.section-cell {
  height: 180rpx;
  width: 750rpx;
  background-color: gold;
  margin-top: 10rpx;
}

簡單列表效果.png
那我們要怎么樣讓頭部懸停呢?
1、我們需要在頁面布局完成后獲取到頭部的位置:

在onReady方法中店乐,查詢section-header節(jié)點并拿到該節(jié)點此時距離當前頂部的距離

注意是 此時艰躺,這個后面再講
  /**
   * 頁面加載完成
   */
  onReady: function () {
    let that = this
    let query = wx.createSelectorQuery()
    query.select(".section-header").boundingClientRect(function (res) {
      // console.log(res)
      that.setData({
        //section header 距離 ‘當前頂部’ 距離
        sectionHeaderLocationTop: res.top
      })
    }).exec()
  },
2、我們需要監(jiān)聽頁面滾動:

fixed用來控制是否懸停

  /**
   * 頁面滾動監(jiān)聽
   */
  onPageScroll: function (e) {
    //console.log(e)
    this.data.scrollTop = e.scrollTop;
    if (e.scrollTop > this.data.sectionHeaderLocationTop) {
      this.setData({
        fixed: true
      })
    } else {
      this.setData({
        fixed: false
      })
    }
  },
3眨八、修改相應的樣式:
將原來的header修改為如下代碼腺兴,并添加一個placeholder視圖,目的是當我們的section-header視圖懸停時廉侧,保持占位页响,避免頁面抖動
<view class='{{fixed ? "section-header section-fixed": "section-header"}}'>這是section-header</view>
<view hidden='{{!fixed}}' class="section-header section-placeholder"></view> 
增加wxss代碼
.section-placeholder {
  background-color: white;
}

.section-fixed {
  position: fixed;
  top: 0;
}

附上js data 代碼:

  data: {
    testData:[1,2,3,4,5,6,7,8,9,10],
    //section header 距離 ‘當前頂部’ 距離
    sectionHeaderLocationTop: 0,
    //頁面滾動距離
    scrollTop: 0,
    //是否懸停
    fixed: false
  },
  

此時我們需要的效果就實現(xiàn)了:


sectionHeader懸浮.gif
這個有一個要注意的點,我們在使用swlectorQuery()的時候伏穆,獲取到的top是當前調(diào)用改函數(shù)時相應節(jié)點對應當前頂部的距離拘泞,這就有一個問題纷纫,當我們的header的高度(不一定是header只要是section-header上面的視圖的高度)發(fā)生變化的時候枕扫,懸停就會有問題,因為我們的高度是最開始的時候獲取的辱魁。

所以在我們改變高度之后烟瞧,要再次調(diào)用該函數(shù)去獲取距離"當前頂部"的距離,這也是要注意的一個點染簇,如果我能直接再次獲取并賦值参滴,發(fā)現(xiàn)還是有問題,就是因為此時獲取的top不是距離整個page頁面頂部锻弓,而我們監(jiān)聽的頁面滾動卻是砾赔,所以我們可以修改代碼如下:

  let that = this
    let query = wx.createSelectorQuery()
    query.select(".section-header").boundingClientRect(function (res) {
      // console.log(res)
      that.setData({
        //section header 距離 ‘當前頂部’ 距離
        sectionHeaderLocationTop: res.top + that.data.scrollTop
      })
    }).exec()

加上此時頁面滾動的距離,則能保證我們預期的效果出現(xiàn)G嘧啤1┬摹!杂拨!

賞我一個贊吧~~~

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末专普,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弹沽,更是在濱河造成了極大的恐慌檀夹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策橘,死亡現(xiàn)場離奇詭異炸渡,居然都是意外死亡,警方通過查閱死者的電腦和手機丽已,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門蚌堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人促脉,你說我怎么就攤上這事辰斋〔咧荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵宫仗,是天一觀的道長够挂。 經(jīng)常有香客問我,道長藕夫,這世上最難降的妖魔是什么孽糖? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮毅贮,結(jié)果婚禮上办悟,老公的妹妹穿的比我還像新娘绣檬。我一直安慰自己拓诸,他們只是感情好穷躁,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布晕拆。 她就那樣靜靜地躺著蝶棋,像睡著了一般坷衍。 火紅的嫁衣襯著肌膚如雪疙渣。 梳的紋絲不亂的頭發(fā)上且轨,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天酒甸,我揣著相機與錄音魄健,去河邊找鬼。 笑死插勤,一個胖子當著我的面吹牛沽瘦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播农尖,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼析恋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卤橄?” 一聲冷哼從身側(cè)響起绿满,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窟扑,沒想到半個月后喇颁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嚎货,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年橘霎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖属。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡姐叁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情外潜,我是刑警寧澤原环,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站处窥,受9級特大地震影響嘱吗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滔驾,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一谒麦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哆致,春花似錦绕德、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驹溃,卻和暖如春城丧,著一層夾襖步出監(jiān)牢的瞬間延曙,已是汗流浹背豌鹤。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枝缔,地道東北人布疙。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像愿卸,于是被迫代替她去往敵國和親灵临。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容