elementui样式穿透,element样式穿透

  elementui样式穿透,element样式穿透

  本文主要介绍了元素穿梭框性能优化,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  

目录

   背景解决思路新问题进阶

  

背景

  穿梭框处理大数据量时,由于渲染的数字正射影像图节点过多,造成页面卡顿的问题。

  在尽量不改变组件原有逻辑的前提下,进行优化。

  

解决思路

  懒加载-无限小球组件

  先从包装/转移中将原组件拷出(或者改源码重新打包维护私有库使用)

  将

  v无限滚动=pageDown

  :infinite-scroll-immediate= false

  添加到

  埃尔-复选框-组

  v-show=!哈斯诺玛奇数据长度0

  v-model=已检查

  :size=size

  :class={ 是可筛选的:可筛选}

  el-transfer-panel__list

  v无限滚动=pageDown

  :infinite-scroll-immediate= false

  埃尔-复选框

  el-transfer-panel__item

  :label=item[keyProp]

  :disabled=item[disabledProp]

  :key=item[keyProp]

  v-for=过滤的数据中的项目

  选项内容:选项=项目/选项内容

  /El-复选框

  /el-checkbox-group

  在数据中定义页面大小:20用来表示每页数据个数showData: []仅用来展示使用,替换上述代码中实际需要操作的数据过滤数据

  v-for= showData中的项目

  同时在看中相应的处理

  数据(数据){

  检查的常量=[];

  this.showData=data.slice(0,this。pagesize);

  const过滤数据键=this。过滤后的数据。地图(

  (item)=item[this.keyProp]

  );

  this.checked.forEach((item)={

  if(filtereddatakeys。(项目)-1)的索引{

  已检查.推送(项目);

  }

  });

  this.checkChangeByUser=false

  this.checked=已检查;

  },

  filteredData (filteredData) {

  这个。showdata=已过滤的数据。切片(0,这个。pagesize);

  }

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

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

  pageDown () {

  const l=this。显示数据。长度;

  const总长度=this。过滤后的数据。长度

  我的总长度

  (这个。showdata=this。过滤后的数据。slice(0,l this.pageSize totalLength?

  总长度:l本。pagesize));

  },

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

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

  

新问题

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

  

进阶

  在滚动过程中,实际上顶端的数据依旧无法看见,该数据不展示,对用户体验也没有影响,

  所以只需展示当前页的20 条数据。

  我们为埃尔-复选框-组添加一个ref=容器以便操作滚动条,

  在数据中定义当前页数库索引:1

  并对向下翻页方法进行修改

  pageDown () {

  const总长度=this。过滤后的数据。长度

  如果((这个。库索引*这个。pagesize)总长度){

  this.curIndex

  const目标长度=this。库索引*这个。页面大小

  const endPoint=目标长度总长?总长度:目标长度

  常量起点=终点-this。pagesize 0?端点- this.pageSize : 0

  这个。showdata=this。过滤后的数据。切片(起点、终点);

  这个参考文献。滚动容器。$ El。scroll top= 1px //滚动条到最上端,衔接下一页,为0 可能会触发边界问题

  }

  }

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

  无限小球指令只提供向下滚动,我们可以拓展该指令亦可自行添加上滑滚动监听

  已安装(){

  这个参考文献。滚动容器。$ El。addevent侦听器( scroll ,this.pageUp)

  },

  销毁前(){

  这个。$ refs . scroll container . $ El . removeeventlistener( scroll ,this.pageUp)

  },

  注册分页方法

  翻页(e){

  if(e . target . scroll top===0 this . curindex 1){

  this.curIndex

  const endPoint=this . curindex * this . pagesize

  const start point=(this . curindex-1)* this . pagesize

  this . showdata=this . filtered data . slice(start point,endPoint);

  const el=this。$refs.scrollContainer.$el

  El . Scroll top=El . Scroll height-El . client height-1//滚动到底部与上一页连接,-1防止边界问题。

  }

  },

  当数据被操作时,滚动条也会随着页面内容的变化而变化。为了防止不可预知的翻页,请在数据更改时重置滚动条和当前页码。

  initScroll(){

  this.curIndex=1

  这个。$ refs . scroll container . $ El . scroll top=0

  },

  同时,在手表中相应的时间执行initScroll。

  data(){

  .

  this.initScroll()

  .

  },

  filteredData (filteredData) {

  .

  this.initScroll()

  }

  到目前为止,大数据量的穿梭帧的性能有了很大的提高。

  这就是本文关于元素穿梭盒性能优化的实现。有关元素穿梭箱性能优化的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: