最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何封裝一個類似微信通訊錄帶有字母檢索功能的vue組件

 更新時間:2024年08月28日 09:11:08   作者:江一銘  
這篇文章主要介紹了如何封裝一個類似微信通訊錄帶有字母檢索功能的vue組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

封裝一個類似微信通訊錄帶有字母檢索功能的vue組件

這里我們直接使用scrollIntoView方法

該方法將調(diào)用它的元素滾動到瀏覽器窗口的可見區(qū)域

語法

element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); //布爾參數(shù)
element.scrollIntoView(scrollIntoViewOptions); //對象參數(shù)

組件

分析一下功能就知道很簡單了。

首先需要一個通訊錄列表,其次是字母列表。

字母列表很簡單。

第一種方法

直接用fromCharCode,for循環(huán)遍歷拿到26個英文字母。

// 獲取26個英文字母大寫
    for (var i = 0; i < 26; i++) {
      this.letter.push(String.fromCharCode(65 + i))
    }

但是這樣的做法,有一個壞處就是,如果通訊錄沒有這么多呢?

換句話說,如果通訊錄只有ABCDEFG這幾個首字母的聯(lián)系人,你把26個都弄上去有點不太合適。

第二種方法

也是相對簡單的,直接從通訊錄列表拿到字母。當然,這種方法需要后端給你對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。并且得讓他給你按首字母排序好,畢竟能少一事少一事。什么?他不干?打一頓他就聽話了。

當然,我給出的數(shù)據(jù)結(jié)構(gòu)你可以參考:

const peoArray = [
        {
          key: "A",
          list: [
            {
              name: "安吉",
            },
            {
              name: "安吉",
            },
          ],
        },
        {
          key: "B",
          list: [
            {
              name: "爸爸",
            },
            {
              name: "芭比",
            },
          ],
        },
        {
          key: "C",
          list: [
            {
              name: "蔡徐坤",
            },
            {
              name: "蔡徐坤",
            },
          ],
        },
 ]

直接上代碼

<template>
  <div id="letterPeo">
    <!-- 導(dǎo)航欄 -->
    <nav class="navBar" v-if="navBar" :style="{ height: navBarHeight }">頭部導(dǎo)航欄</nav>
    <!-- 字母檢索 -->
    <div class="letter">
      <div v-for="(item, index) in letter" :key="index" @click="scrollOn(item, index)">
        {{ item }}
      </div>
    </div>

    <!-- 通訊錄列表 -->
    <div class="peoBox">
      <div class="peo" ref="box">
        <div
          v-for="(item, index) in peoArray"
          :key="index"
          @click="onSelect(item, index)"
        >
          <p class="peoKey" :id="'peo' + item.key">{{ item.key }}</p>
          <p class="peolist" v-for="(ele, e) in item.list" :key="e">{{ ele.name }}</p>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      navBar: true, //是否開啟頭部導(dǎo)航
      navBarHeight: "50px", //導(dǎo)航欄高度
      letter: [], //字母檢索列表
      peoArray: [],//通訊錄列表
    };
  },
  computed: {},
  mounted() {
    // 獲取26個英文字母大寫
    // for (var i = 0; i < 26; i++) {
    //   this.letter.push(String.fromCharCode(65 + i))
    // }

    // 只獲取通訊錄字母
    this.peoArray.forEach((ele) => {
      this.letter.push(ele.key);
    });

    //因為有導(dǎo)航欄的原因,默認距離頂部一個導(dǎo)航欄的高度
    if (this.navBar) this.$refs.box.style.marginTop = this.navBarHeight;
  },
  methods: {
    // 字母檢索
    scrollOn(item) {
      if (this.navBar) this.$refs.box.style.marginTop = 0; // 開啟導(dǎo)航后,上邊距默認清零

      let target = document.getElementById("peo" + item); //獲取每個字母通訊錄對象
      if (target)
        target.scrollIntoView({
          behavior: "smooth", // 定義動畫過渡效果, "auto"或 "smooth" 之一。默認為 "auto"
        });

      if (this.navBar) this.$refs.box.style.marginTop = this.navBarHeight; //因為有導(dǎo)航欄的原因,所以上邊距應(yīng)該為導(dǎo)航欄的高度
    },
    // 點擊通訊錄
    onSelect(item, index) {
      console.log(item, index);
    },
  },
};
</script>

<style scoped>
#letterPeo {
  width: 100%;
}
/* 導(dǎo)航欄 */
.navBar {
  width: 100%;
  position: fixed;
  text-align: center;
  line-height: 50px;
  background: #abf0ff;
  z-index: 3;
}
/* 字母 */
.letter {
  position: fixed;
  right: 10px;
  top: 15%;
  z-index: 2;
}
/* 通訊錄 */
.peoBox {
  position: relative;
}

.peo {
  width: 100%;
  overflow-y: scroll;
  position: absolute;
}
.peo p{
    padding: 0 10px;
}
.peo .peoKey {
  margin: 10px 0;
  font-size: 12px;
  background-color: #f3efef;
}
.peolist {
  margin: 20px 0;
}
</style>

完整數(shù)據(jù)

[
        {
          key: "A",
          list: [
            {
              name: "安吉",
            },
            {
              name: "安吉",
            },
          ],
        },
        {
          key: "B",
          list: [
            {
              name: "爸爸",
            },
            {
              name: "芭比",
            },
          ],
        },
        {
          key: "C",
          list: [
            {
              name: "蔡徐坤",
            },
            {
              name: "蔡徐坤",
            },
          ],
        },
        {
          key: "D",
          list: [
            {
              name: "打飛機",
            },
          ],
        },
        {
          key: "E",
          list: [
            {
              name: "餓了么",
            },
          ],
        },
        {
          key: "F",
          list: [
            {
              name: "方慧",
            },
          ],
        },
        {
          key: "G",
          list: [
            {
              name: "哥哥",
            },
          ],
        },
        {
          key: "H",
          list: [
            {
              name: "黃老頭",
            },
          ],
        },
        {
          key: "I",
          list: [
            {
              name: "ikun",
            },
          ],
        },
        {
          key: "J",
          list: [
            {
              name: "接化發(fā)",
            },
          ],
        },
        {
          key: "K",
          list: [
            {
              name: "KFC",
            },
          ],
        },
        {
          key: "L",
          list: [
            {
              name: "劉老根",
            },
          ],
        },
        {
          key: "M",
          list: [
            {
              name: "沒讀書",
            },
          ],
        },
        {
          key: "N",
          list: [
            {
              name: "牛頭人",
            },
          ],
        },
        {
          key: "O",
          list: [
            {
              name: "O泡果奶",
            },
          ],
        },
        {
          key: "P",
          list: [
            {
              name: "嫖老頭",
            },
          ],
        },
        {
          key: "Q",
          list: [
            {
              name: "秦三兒",
            },
          ],
        },
        {
          key: "R",
          list: [
            {
              name: "日",
            },
          ],
        },
        {
          key: "S",
          list: [
            {
              name: "塞班",
            },
          ],
        },
        {
          key: "T",
          list: [
            {
              name: "糖糖",
            },
          ],
        },
        {
          key: "U",
          list: [
            {
              name: "U哈哈哈哈",
            },
          ],
        },
        {
          key: "V",
          list: [
            {
              name: "V ME 50",
            },
          ],
        },
        {
          key: "W",
          list: [
            {
              name: "王富貴",
            },
          ],
        },
        {
          key: "X",
          list: [
            {
              name: "喜羊羊",
            },
          ],
        },
        {
          key: "Y",
          list: [
            {
              name: "陽頂天",
            },
          ],
        },
        {
          key: "Z",
          list: [
            {
              name: "趙一曼",
            },
          ],
        },
      ],

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Vue3-Ace-Editor如何在Vue3項目中集成代碼編輯器

    使用Vue3-Ace-Editor如何在Vue3項目中集成代碼編輯器

    這篇文章主要介紹了使用Vue3-Ace-Editor如何在Vue3項目中集成代碼編輯器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 使用vue實現(xiàn)多規(guī)格選擇實例(SKU)

    使用vue實現(xiàn)多規(guī)格選擇實例(SKU)

    這篇文章主要介紹了使用vue實現(xiàn)多規(guī)格選擇實例(SKU),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue使用Vue.extend創(chuàng)建全局toast組件實例

    vue使用Vue.extend創(chuàng)建全局toast組件實例

    這篇文章主要介紹了vue使用Vue.extend創(chuàng)建全局toast組件實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 淺談vue3在項目中的邏輯抽離和字段顯示

    淺談vue3在項目中的邏輯抽離和字段顯示

    本文主要介紹了vue3在項目中的邏輯抽離和字段顯示,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue拖拽組件vuedraggable使用說明詳解

    vue拖拽組件vuedraggable使用說明詳解

    這篇文章主要為大家詳細介紹了vue拖拽組件vuedraggable的使用說明,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue Router 實現(xiàn)動態(tài)路由和常見問題及解決方法

    Vue Router 實現(xiàn)動態(tài)路由和常見問題及解決方法

    動態(tài)路由不同于常見的靜態(tài)路由,可以根據(jù)不同的「因素」而改變站點路由列表。這篇文章主要介紹了Vue Router 實現(xiàn)動態(tài)路由和常見問題解決方案,需要的朋友可以參考下
    2020-03-03
  • 解決echart在vue中id重復(fù)問題

    解決echart在vue中id重復(fù)問題

    這篇文章主要介紹了解決echart在vue中id重復(fù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue項目中的支付功能實現(xiàn)(微信支付和支付寶支付)

    vue項目中的支付功能實現(xiàn)(微信支付和支付寶支付)

    本文主要介紹了vue項目中的支付功能實現(xiàn)(微信支付和支付寶支付),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Vue 菜單欄點擊切換單個class(高亮)的方法

    Vue 菜單欄點擊切換單個class(高亮)的方法

    今天小編就為大家分享一篇Vue 菜單欄點擊切換單個class(高亮)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue引用echarts超詳細步驟(附圖文)

    Vue引用echarts超詳細步驟(附圖文)

    這篇文章主要給大家介紹了關(guān)于Vue引用echarts超詳細步驟,vue中優(yōu)雅的使用echarts?在前端工作中,數(shù)據(jù)可視化用得最多的,可能就是圖表了,需要的朋友可以參考下
    2023-08-08

最新評論

裕民县| 确山县| 海晏县| 巫溪县| 年辖:市辖区| 翼城县| 惠东县| 平阳县| 韶山市| 壤塘县| 敦化市| 阜宁县| 开鲁县| 新蔡县| 巨野县| 枣庄市| 平阴县| 怀来县| 抚松县| 井冈山市| 伊通| 金坛市| 宜阳县| 高青县| 县级市| 海伦市| 新龙县| 梅河口市| 盐城市| 临西县| 珲春市| 榆中县| 惠水县| 资中县| 松江区| 英超| 吉木乃县| 侯马市| 佳木斯市| 株洲县| 新闻|