微信小程序?qū)崿F(xiàn)字母導航欄及滾動實時更新

一個完整的字母導航欄功能包括三個部分,可按需食用:
1.點擊跳轉(zhuǎn)
2.滑動更新
3.保存選中

一蠢络、點擊跳轉(zhuǎn)功能

主要思路是利用微信自帶的<scroll-view>組件的scroll-into-view屬性卡睦,非常方便筒主。

1.在需要進行跳轉(zhuǎn)的scroll-view組件上綁定scroll-into-view屬性
2.綁定的屬性值必須為動態(tài)值有额,與跳轉(zhuǎn)目標的id對應(yīng)效诅,如:{{toView}}
3.設(shè)置跳轉(zhuǎn)目標所在元素的id進行定位(關(guān)鍵N喑恕!)
示例代碼如下:

    <scroll-view scroll-into-view="{{toView}}">
        <view id="{{ item.firstChar }}">{{ item.firstChar }}</view>
    </scroll-view>

4.在字母導航列表上綁定事件和自定義屬性data-xxxx稼虎,以便事件的捕獲currentTarget.dataset
示例代碼如下:

<view wx:for="{{sortedCityList}}" 
      data-first-char="{{item.firstChar}}" 
      bindtap="handleToView"
      >
      {{item.firstChar}}
</view>

5.在js文件中定義toView變量和handleToView事件
示例代碼如下:

  data: {
    toView: "A", // 用戶點擊的字母id
  },
  handleToView: function (event) {
    let view = event.currentTarget.dataset.firstChar
    this.setData({
      toView: view
    })
  }

但是衅檀!這里還有個小問題
那就是,如果將對應(yīng)的跳轉(zhuǎn)元素設(shè)置了:position: sticky屬性霎俩,從上往下點擊時能正常跳轉(zhuǎn)哀军,但從下往上點擊時,會出現(xiàn)跳轉(zhuǎn)不到期望位置的情況打却,這個問題有待解決杉适。

二、滑動更新

滑動頁面時同步更新導航欄的選中樣式柳击,實現(xiàn)的主要思路是猿推,首先使用wx.createSelectorQuery()獲取每個字母標題對應(yīng)的高度以及對應(yīng)的字母id,然后使用scroll-view組件的bindScroll監(jiān)聽當前頁面的高度進行比較并賦值
示例代碼如下:

    // 獲取每個字母標題對應(yīng)的高度及對應(yīng)字母id,并存儲起來捌肴,第二次進入頁面時判斷蹬叭,不能重復計算
    if (heightArray.length === 0) {
      let that = this
      setTimeout( function () {
        const query = wx.createSelectorQuery()
        query.selectAll('.first-character').boundingClientRect( function (rect) {
          rect.forEach( function (value) {
            heightArray.push({ 'height': value.top , 'letter': value.id })
          })
          that.setData({
            heightArray
          })
          app.store.heightArray = heightArray
        }).exec()
      },1)
    }

得到heightArray后,通過bindScroll事件綁定觸發(fā)方法状知,在滾動時進行判斷:

  letterScroll (event) {
    //如果實時判斷影響性能的話秽五,可以用清除定時器的方法節(jié)流
    //   clearTimeout(this.data.timeId)
    this.data.timeId = setTimeout( () => {
      let currentScrollTop = event.detail.scrollTop // 滾動條距離頂部的實時距離
      const heightArray = this.data.heightArray
      for (let i = 0; i <= heightArray.length; i++) {
        // 判斷是否滑到最后一個字母
        if (currentScrollTop >= heightArray[heightArray.length-1].height) {
          this.setData({
            currentLetter: heightArray[heightArray.length-1].letter
          })
          // console.log('currentScrollTop',currentScrollTop)
          // console.log(heightArray)
          // console.log('end:',this.data.currentLetter)
          break
        }else if (currentScrollTop < heightArray[i+1].height) {
          this.setData({
            currentLetter: heightArray[i].letter
          })
          // console.log('currentScrollTop',currentScrollTop)
          // console.log('currentScroll',this.data.currentLetter)
          break
        }
      }
    },200)
  }

三、保存選中
主要思路是將狀態(tài)變量存到app的data中饥悴,初始化時從app data讀取并賦值坦喘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市西设,隨后出現(xiàn)的幾起案子瓣铣,更是在濱河造成了極大的恐慌,老刑警劉巖贷揽,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坯沪,死亡現(xiàn)場離奇詭異,居然都是意外死亡擒滑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門叉弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丐一,“玉大人,你說我怎么就攤上這事淹冰】獬担” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵樱拴,是天一觀的道長柠衍。 經(jīng)常有香客問我洋满,道長,這世上最難降的妖魔是什么珍坊? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任牺勾,我火速辦了婚禮,結(jié)果婚禮上阵漏,老公的妹妹穿的比我還像新娘驻民。我一直安慰自己,他們只是感情好履怯,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布回还。 她就那樣靜靜地躺著,像睡著了一般叹洲。 火紅的嫁衣襯著肌膚如雪柠硕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天运提,我揣著相機與錄音蝗柔,去河邊找鬼。 笑死糙捺,一個胖子當著我的面吹牛诫咱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洪灯,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坎缭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了签钩?” 一聲冷哼從身側(cè)響起掏呼,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铅檩,沒想到半個月后憎夷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡昧旨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年拾给,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兔沃。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒋得,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乒疏,到底是詐尸還是另有隱情额衙,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站窍侧,受9級特大地震影響县踢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伟件,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一硼啤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锋爪,春花似錦丙曙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拯爽,卻和暖如春索抓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毯炮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工逼肯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桃煎。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓篮幢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親为迈。 傳聞我的和親對象是個殘疾皇子三椿,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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