iis服务器助手广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >element 穿梭框性能优化的实现
  • 717
分享到

element 穿梭框性能优化的实现

2024-04-02 19:04:59 717人浏览 薄情痞子
摘要

目录背景解决思路新问题进阶背景 穿梭框处理大数据量时,由于渲染的 DOM 节点过多,造成页面卡顿的问题。 在尽量不改变组件原有逻辑的前提下,进行优化。 解决思路 懒加载 - I

背景

穿梭框处理大数据量时,由于渲染的 DOM 节点过多,造成页面卡顿的问题。
在尽量不改变组件原有逻辑的前提下,进行优化

解决思路

懒加载 - InfiniteScroll 组件
先从 packages/transfer 中将原组件拷出(或者改源码重新打包维护私有库使用)


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 用来表示每页数据个数showData: [] 仅用来展示使用,替换上述代码中实际需要操作的数据 filteredData


 v-for="item in showData">

同时在watch中相应的处理


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);
 }

初始化展示数量随意这里取 20。

最后添加滚动到底部时调用的方法


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));
},

往下滚动的时候 展示的数据长度增加 20(数量随意), 超出时展示最大长度。

由此基本解决大数据量操作卡顿的问题。由于展示和逻辑层分开,组件的所有操作逻辑无须修改,最小程度减少差异。

新问题

手动滚动到列表末端,再进行搜索操作依然存在卡顿问题。

进阶

在滚动过程中,实际上顶端的数据依旧无法看见,该数据不展示,对用户体验也没有影响,
所以只需展示当前页的 20 条数据。

我们为el-checkbox-group添加一个 ref=scrollContainer 以便操作滚动条,

在data中定义当前页数 curIndex: 1

并对 pageDown 方法进行修改


    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 可能会触发边界问题
      }
    }

为此我们还需要添加向上翻页的方法


InfiniteScroll 指令 只提供向下滚动,我们可以拓展该指令亦可自行添加上滑滚动监听
    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 防止边界问题。
      }
    },

当进行数据操作的时候,页面内容变化,滚动条也会随之变化,为防止不能预知的翻页,数据改变时,重置滚动条和当前页码。


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

同时地,在watch中相应时候执行 initScroll


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

至此大数据量的穿梭框,性能大为改善。

到此这篇关于element 穿梭框性能优化的实现的文章就介绍到这了,更多相关element 穿梭框性能优化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: element 穿梭框性能优化的实现

本文链接: https://www.lsjlt.com/news/155432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • element 穿梭框性能优化的实现
    目录背景解决思路新问题进阶背景 穿梭框处理大数据量时,由于渲染的 DOM 节点过多,造成页面卡顿的问题。 在尽量不改变组件原有逻辑的前提下,进行优化。 解决思路 懒加载 - I...
    99+
    2024-04-02
  • Vue 实现穿梭框功能的详细代码
    Vue - 实现穿梭框功能,效果图如下所示: css .transfer{ display: flex; justify-content: center; ...
    99+
    2024-04-02
  • 怎么利用Vue实现拖拽穿梭框功能
    今天小编给大家分享一下怎么利用Vue实现拖拽穿梭框功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用原生js实现拖拽...
    99+
    2023-07-04
  • 使用jQuery实现简单穿梭框方式
    目录jQuery实现穿梭框jQuery穿梭框,可上下左右,全选移动jQuery实现穿梭框 项目需要,做个简单的穿梭框****效果图如下 <!DOCTYPE html>...
    99+
    2022-11-13
    jQuery穿梭框 jQuery实现穿梭框 jQ穿梭框
  • JS如何实现双栏穿梭选择框
    这篇文章主要介绍了JS如何实现双栏穿梭选择框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。结构分支代码dataSelection.html<!DOCTYPE ...
    99+
    2023-06-25
  • 基于Vue怎么实现树形穿梭框
    这篇文章主要介绍了基于Vue怎么实现树形穿梭框的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Vue怎么实现树形穿梭框文章都会有所收获,下面我们一起来看看吧。树形穿梭框插件el-tree-transfer这个...
    99+
    2023-06-30
  • Vue实现拖拽穿梭框功能四种方式实例详解
    目录一、使用原生js实现拖拽二、VUe使用js实现拖拽穿梭框三、Vue 拖拽组件 vuedraggable四、Awe-dnd指令封装一、使用原生js实现拖拽 <html lan...
    99+
    2024-04-02
  • Ant Design Vue中如何实现省市穿梭框
    本篇内容主要讲解“Ant Design Vue中如何实现省市穿梭框”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ant Design Vue中如何实现省市穿梭框”吧!树形穿梭框官方树穿梭框如下,...
    99+
    2023-06-22
  • 基于Vue实现树形穿梭框的示例代码
    Vue 项目里面需要一个树形的穿梭框,但是 elementUI 和 ant-d 组件库的穿梭框组件效果都不是很好,因为源列表和目标列表都是需要树形结构的,所以说这个就很难搞,但是也不...
    99+
    2024-04-02
  • JS原生双栏穿梭选择框的实现示例
    目录何时使用结构分支代码何时使用 用直观的方式在两栏中移动元素,完成选择行为。 选择一个或以上的选项后,点击对应的方向键,可以把选中的选项移动到另一栏。 其中,左边一栏为 sourc...
    99+
    2024-04-02
  • CSS3 如何实现穿梭星空动画功能
    本篇内容主要讲解“CSS3 如何实现穿梭星空动画功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3 如何实现穿梭星空动画功能”吧!实现效果:html<canvas id=...
    99+
    2023-06-08
  • 手写可拖动穿梭框组件CustormTransfervue实现示例
    目录本文内容最终效果图组件html布局穿梭框左侧内容穿梭框右侧内容穿梭框中间向左、向右按钮把排序好的穿梭数据传给父组件整体代码小结本文内容 需求是实现类似 el-transfer的组...
    99+
    2022-11-13
    vue拖动穿梭框CustormTransfer 手写 CustormTransfer
  • Element的穿梭框数据量大时点击全选卡顿的解决方案
    目录方案一:复制EUI的transfer组件,然后进行修改,再引入项目目录方案二:分页操作分析方案现象:我们渲染了9999条数据,由于transfer组件会一次性渲染所有数据,所以一...
    99+
    2024-04-02
  • 怎么解决Element的穿梭框数据量大时点击全选卡顿问题
    本篇内容介绍了“怎么解决Element的穿梭框数据量大时点击全选卡顿问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!现象:我们渲染了999...
    99+
    2023-06-25
  • PHP函数的框架性能优化
    PHP作为当今最受欢迎的Web编程语言,在许多PHP应用中,函数的框架性能是至关重要的。在本文中,我们将探讨一些方法来优化PHP函数的框架性能,以便使其更快、更有效率。函数调用的代价函数调用是一个非常昂贵的操作。当一个函数被调用时,PHP必...
    99+
    2023-05-18
    性能优化 PHP函数 框架性能优化
  • MySQL性能优化如何实现
    这篇文章将为大家详细讲解有关MySQL性能优化如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库表设计S...
    99+
    2024-04-02
  • 怎么实现PHP性能优化
    这期内容当中小编将会给大家带来有关怎么实现PHP性能优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP语言功能虽然强大,但是也需要程序员们编写规范,创造出性能优越的代码程序。下面我们就为大家一起分享...
    99+
    2023-06-17
  • 优化Zend框架的性能的方法
    Zend框架是一个基于PHP语言的开源Web应用程序框架,被广泛应用于企业级Web应用的开发中。尽管Zend框架凭借其高度模块化、可扩展性和代码重用性等优势在市场上占据重要地位,但这并不意味着它的性能就一定高效。事实上,如何优化...
    99+
    2024-01-22
    性能优化 zend 框架。
  • Golang 技术性能优化中如何实现分布式性能优化?
    如何实现 golang 分布式性能优化?并发编程: 利用 goroutine 并行执行任务。分布式锁: 使用互斥锁防止并发操作导致数据不一致。分布式缓存: 使用 memcached 减少...
    99+
    2024-05-12
    golang 性能优化 git
  • PHP 应用程序性能优化中 Laravel 框架的性能调优
    laravel 框架提供多种性能优化策略:减少查询:使用延迟加载、缓存查询结果、索引数据库表和优化 wherein() 语句。优化路由:缓存路由、使用路由组和避免使用 catc...
    99+
    2024-05-03
    性能优化 laravel redis composer 延迟加载
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作