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

element 穿梭框性能優(yōu)化的實現(xiàn)

 更新時間:2021年10月26日 08:29:47   作者:微醫(yī)前端團(tuán)隊  
本文主要介紹了element 穿梭框性能優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

背景

穿梭框處理大數(shù)據(jù)量時,由于渲染的 DOM 節(jié)點過多,造成頁面卡頓的問題。
在盡量不改變組件原有邏輯的前提下,進(jìn)行優(yōu)化。

解決思路

懶加載 - InfiniteScroll 組件
先從 packages/transfer 中將原組件拷出(或者改源碼重新打包維護(hù)私有庫使用)

v-infinite-scroll="pageDown"
:infinite-scroll-immediate="false"

添加到

<el-checkbox-group
        v-show="!hasNoMatch && data.length > 0"
        v-model="checked"
        :size="size"
        :class="{ 'is-filterable': filterable }"
        class="el-transfer-panel__list"
        v-infinite-scroll="pageDown"
        :infinite-scroll-immediate="false"
      >
        <el-checkbox
          class="el-transfer-panel__item"
          :label="item[keyProp]"
          :disabled="item[disabledProp]"
          :key="item[keyProp]"
          v-for="item in filteredData">
            <option-content :option="item"></option-content>
        </el-checkbox>
</el-checkbox-group>

在data中定義pageSize: 20 用來表示每頁數(shù)據(jù)個數(shù)showData: [] 僅用來展示使用,替換上述代碼中實際需要操作的數(shù)據(jù) filteredData

 v-for="item in showData">

同時在watch中相應(yīng)的處理

data (data) {
    const checked = [];
    this.showData = data.slice(0, this.pageSize);

    const filteredDataKeys = this.filteredData.map(
    (item) => item[this.keyProp]
    );
    this.checked.forEach((item) => {
    if (filteredDataKeys.indexOf(item) > -1) {
        checked.push(item);
    }
    });
    this.checkChangeByUser = false;
    this.checked = checked;
},
filteredData (filteredData) {
    this.showData = filteredData.slice(0, this.pageSize);
 }

初始化展示數(shù)量隨意這里取 20。

最后添加滾動到底部時調(diào)用的方法

pageDown () {
    const l = this.showData.length;
    const totalLength = this.filteredData.length
    l < totalLength && 
    (this.showData = this.filteredData.slice(0, l + this.pageSize > totalLength ?
    totalLength : l + this.pageSize));
},

往下滾動的時候 展示的數(shù)據(jù)長度增加 20(數(shù)量隨意), 超出時展示最大長度。

由此基本解決大數(shù)據(jù)量操作卡頓的問題。由于展示和邏輯層分開,組件的所有操作邏輯無須修改,最小程度減少差異。

新問題

手動滾動到列表末端,再進(jìn)行搜索操作依然存在卡頓問題。

進(jìn)階

在滾動過程中,實際上頂端的數(shù)據(jù)依舊無法看見,該數(shù)據(jù)不展示,對用戶體驗也沒有影響,
所以只需展示當(dāng)前頁的 20 條數(shù)據(jù)。

我們?yōu)閑l-checkbox-group添加一個 ref=scrollContainer 以便操作滾動條,

在data中定義當(dāng)前頁數(shù) curIndex: 1

并對 pageDown 方法進(jìn)行修改

    pageDown () {
      const totalLength = this.filteredData.length
      if((this.curIndex*this.pageSize) < totalLength){
        this.curIndex ++
        const targetLength = this.curIndex * this.pageSize 
        const endPoint = targetLength > totalLength ? totalLength : targetLength
        const startPoint = endPoint - this.pageSize  > 0 ? endPoint - this.pageSize : 0
        this.showData = this.filteredData.slice(startPoint, endPoint);
        this.$refs.scrollContainer.$el.scrollTop = "1px" //滾動條到最上端,銜接下一頁,為 0 可能會觸發(fā)邊界問題
      }
    }

為此我們還需要添加向上翻頁的方法

InfiniteScroll 指令 只提供向下滾動,我們可以拓展該指令亦可自行添加上滑滾動監(jiān)聽
    mounted(){
        this.$refs.scrollContainer.$el.addEventListener('scroll', this.pageUp)
    },
    beforeDestroy(){
        this.$refs.scrollContainer.$el.removeEventListener('scroll', this.pageUp)
    },

注冊pageUp 方法

    pageUp(e){
      if(e.target.scrollTop ===0 && this.curIndex>1){
        this.curIndex --
        const endPoint = this.curIndex * this.pageSize 
        const startPoint = (this.curIndex-1)* this.pageSize 
        this.showData = this.filteredData.slice(startPoint, endPoint);
        const el = this.$refs.scrollContainer.$el
        el.scrollTop = el.scrollHeight - el.clientHeight - 1 // 滾動到最底部,銜接上一頁, -1 防止邊界問題。
      }
    },

當(dāng)進(jìn)行數(shù)據(jù)操作的時候,頁面內(nèi)容變化,滾動條也會隨之變化,為防止不能預(yù)知的翻頁,數(shù)據(jù)改變時,重置滾動條和當(dāng)前頁碼。

    initScroll(){
        this.curIndex = 1
        this.$refs.scrollContainer.$el.scrollTop = 0
    },

同時地,在watch中相應(yīng)時候執(zhí)行 initScroll

    data(){
        ...
        this.initScroll()
        ...
    },
    filteredData (filteredData) {
      ...
      this.initScroll()
    }

至此大數(shù)據(jù)量的穿梭框,性能大為改善。

到此這篇關(guān)于element 穿梭框性能優(yōu)化的實現(xiàn)的文章就介紹到這了,更多相關(guān)element 穿梭框性能優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)在線預(yù)覽office文件的示例代碼

    vue實現(xiàn)在線預(yù)覽office文件的示例代碼

    本文主要介紹了vue實現(xiàn)在線預(yù)覽office文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    今天小編就為大家分享一篇vue 根據(jù)選擇條件顯示指定參數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • VUE中對object.object和object[object]的使用解讀

    VUE中對object.object和object[object]的使用解讀

    這篇文章主要介紹了VUE中對object.object和object[object]的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue實現(xiàn)簡單圖片上傳

    vue實現(xiàn)簡單圖片上傳

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)簡單圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 如何解決vue-json-editor無法輸入中文、重影問題

    如何解決vue-json-editor無法輸入中文、重影問題

    文章介紹了如何解決vue-json-editor組件無法輸入中文和重影的問題,通過修改源碼并使用vue-json-edit-fix-cn組件來 fix 這兩個問題,同時,文章還提供了如何移除舊的依賴包并安裝新的依賴包的步驟
    2025-01-01
  • Vue3中頁面跳轉(zhuǎn)方式總結(jié)

    Vue3中頁面跳轉(zhuǎn)方式總結(jié)

    Vue.js?是一個用于構(gòu)建用戶界面的漸進(jìn)式?JavaScript?框架,它提供了多種方法來實現(xiàn)頁面之間的導(dǎo)航,本文將詳細(xì)介紹?Vue?3?中的各種頁面跳轉(zhuǎn)方式,有需要的小伙伴可以參考一下
    2024-12-12
  • Vue3?計算屬性computed的實現(xiàn)原理

    Vue3?計算屬性computed的實現(xiàn)原理

    這篇文章主要介紹了Vue3?計算屬性computed的實現(xiàn)原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Vue3項目中引入ElementUI并使用的示例詳解

    Vue3項目中引入ElementUI并使用的示例詳解

    ElementUI是一個強(qiáng)大的PC端UI組件框架,它不依賴于vue,但是卻是當(dāng)前和vue配合做項目開發(fā)的一個比較好的ui框架,本文主要介紹了如何在vue3中引入使用ElementUI,需要的可以參考一下
    2023-06-06
  • Vue 路由 過渡動效 數(shù)據(jù)獲取方法

    Vue 路由 過渡動效 數(shù)據(jù)獲取方法

    這篇文章主要介紹了Vue 路由 過渡動效 數(shù)據(jù)獲取方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • this.$toast() 了解一下?

    this.$toast() 了解一下?

    這篇文章主要介紹了vue this.$toast()用法 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

砚山县| 涟源市| 开远市| 郧西县| 武宣县| 新野县| 阿巴嘎旗| 南皮县| 徐汇区| 龙州县| 镇原县| 门头沟区| 九江县| 西丰县| 余江县| 玉溪市| 奉节县| 开封县| 永嘉县| 乌兰浩特市| 大关县| 汕尾市| 海盐县| 云林县| 玛多县| 启东市| 翁源县| 甘德县| 松江区| 荥阳市| 通海县| 娱乐| 寿宁县| 凌云县| 北流市| 高台县| 湘潭县| 阿坝| 灌云县| 遂宁市| 左云县|