element-ui——timeline时间线组件+自动滚动+v-infinite-scroll无限滚动+动态加载——技能提升

这篇具有很好参考价值的文章主要介绍了element-ui——timeline时间线组件+自动滚动+v-infinite-scroll无限滚动+动态加载——技能提升。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


最近看到同事在弄日志记录,需要实现的效果是:

自动滚动+无限滚动+动态加载数据

最终效果图如下:
elementui timeline,前端基础知识,js必会知识点,javascript知识点,ui,javascript,vue.js

1.html部分

<template>
  <div id="boxTimeline" v-infinite-scroll="fnLoadMore" :infinite-scroll-distance="ovISD">
    <el-timeline id="timeline1">
      <el-timeline-item v-for="(items,index) in tableData" :key="index" :timestamp="items.createTime" placement="top">
        <el-card>
          <h4 v-html="resTxt(items.content)"></h4>
          <p>跟进人:{{ items.person }}  跟进方式:{{resRecordType(items.type)}}</p>
        </el-card>
      </el-timeline-item>
      <el-timeline-item v-if="loadPage">
        <el-card ><i class="el-icon-loading"></i> 加载更多中..</el-card>
      </el-timeline-item>
    </el-timeline>
    <el-timeline id="timeline2">
      <el-timeline-item v-for="(items,index) in tableData" :key="index" :timestamp="items.createTime" placement="top">
        <el-card>
          <h4 v-html="resTxt(items.content)"></h4>
          <p>跟进人:{{ items.person }}  跟进方式:{{resRecordType(items.type)}}</p>
        </el-card>
      </el-timeline-item>
    </el-timeline>
  </div>
</template>

解析:为了实现无限滚动,需要做两块一模一样的内容来回交替显示,也就是上面代码中的id="timeline1"和id="timeline2"了文章来源地址https://www.toymoban.com/news/detail-516192.html

2.script部分

<script>
import {getWebCpnRecordList} from "@/api/web";//接口地址
import {resRecordTypes, resTextRN_br} from "@/api/common";//接口地址
export default{
  name: "inc_detail_log",
  props:['mid'],
  data(){
    return{
      loadPage:false,loadMore:true,
      tableData:[],ovISD:0,orgHeight:0,
      pagination: {pageSize:10,current:1,totalCount:0,pages:0},
    }
  },
  mounted() {
    this.filterSearch();
  },
  methods:{
    resRecordType(type){return resRecordTypes(type)},
    resTxt(text){return resTextRN_br(text)},
    fnLoadMore(){
      if (this.loadMore && this.pagination.current < this.pagination.pages){
        this.pagination.current++
        this.filterSearch()
      }
    },
    //列表
    filterSearch(page){
      if(typeof(page)=='number'){
        this.pagination.current = page;
      }
      this.fetch();
    },
    async fetch() {
      this.loadPage = true;
      this.loadMore = false;
      getWebCpnRecordList(this.mid,this.pagination.current,this.pagination.pageSize).then(data=>{
        data = data.data;
        const pagination = {...this.pagination};
        pagination.totalCount = data.total;
        pagination.pages = data.pages;
        for (let i in data.rows){
          data.rows[i].load = false;
        }
        this.tableData = this.tableData.concat(data.rows);
        if (this.pagination.current==1) this.moveUp();
        this.pagination = pagination;
      }).finally(()=>{
        this.loadPage = false;
        this.loadMore = true;
        var org = document.getElementById("timeline1");
        this.orgHeight = org.offsetHeight;
        this.ovISD = this.orgHeight + 100;
      })
    },
    moveUp(){
      var speed = 70
      var org = document.getElementById("timeline1");
      var org1 = document.getElementById("timeline2");
      var organization = document.getElementById("boxTimeline");
      function Marquee() {
        if (org1.offsetTop - organization.scrollTop <= 100){
          // vues.methods.fnLoadMore()
          organization.scrollTop -= org.offsetHeight;
        } else {
          organization.scrollTop++
        }
      }

      let MyMar = setInterval(Marquee, speed)
      organization.onmouseover = function () { clearInterval(MyMar) }
      organization.onmouseout = function () { MyMar = setInterval(Marquee, speed) }
    },
    handleSizeChange(val) {
      this.pagination = {
        pageSize:val,current:1,totalCount:0,
      };
      this.filterSearch();
    },
  }
}
</script>
```
#  3.`css`部分
```css
<style scoped>
#boxTimeline{overflow:auto; padding:20px; height:600px; width:60%; margin:0 auto}
#boxTimeline::-webkit-scrollbar{display: none}
p.pCnt{line-height:1.8em}
.el-timeline h4{margin-top:0; line-height:1.6em}
</style>
```

完成!!!

到了这里,关于element-ui——timeline时间线组件+自动滚动+v-infinite-scroll无限滚动+动态加载——技能提升的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue+element-ui el-table组件二次封装实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题

    某些页面不做分页时,当数据过多,会导致页面卡顿,甚至卡死 一、固定一个 可视区域 的大小并且其大小是不变的,那么要做到性能最大化就需要尽量少地渲染 DOM 元素,而这个最小值也就是可视范围内需要展示的内容,而可视区域之外的元素均可以不做渲染。 二、如何计

    2024年02月10日
    浏览(39)
  • Web前端篇——el-timeline+el-scrollbar时间轴数据刷新后自动显示滚动条

    背景:使用el-timeline+el-scrollbar显示时间轴,当时间轴数据刷新时,el-scrollbar滚动条会自动隐藏。 当给el-scrollbar设置了永久显示滚动条(如下代码),以为可以一劳永逸,发现问题仍然存在。  解决思路:当时间轴数据刷新后,代码触发移动鼠标,el-scrollbar就会显示出滚动条

    2024年01月21日
    浏览(41)
  • 使用element-ui的滚动条

    在项目中引入element-ui后,发现在不同的浏览器显示并不一样,为了统一浏览器中的样式,统一使用了element-ui库中的滚动条。使用方法如下: 1.把想要出滚动条的内容放在下边标签里即可: 2.如果不想要横向的滚动条,添加css: 3.如果相让滚动条一直显示而不是鼠标移入才显

    2024年02月15日
    浏览(35)
  • element-ui select下拉框滚动加载更多

    当下拉框数据过多时,加载会非常慢,所以使用分页去显示,通过监听滚动事件来达到分页效果。 我是使用Vue自定义指令来做的。 一、首先在src下创建一个js文件,完成自定义指令的编写 有没有大神告诉我,自定义指令为啥在同一个页面不能使用多次? 二、在main.js中引入进来

    2024年02月16日
    浏览(36)
  • element-ui table 设置表格滚动条位置

    场景: 在切换不同页面时(被 keep-alive 缓存的组件间切换),页面中的element-ui table的滚动条位置没有停留在原来的位置。目前需要切换不同的页面返回来后,滚动条保持在原来的位置。 代码:

    2024年02月11日
    浏览(43)
  • vue+element-ui 实现下拉框滚动加载

    该功能是由 自定义滚动指令 结合下拉框 :remote-method 远程搜索 实现的 开启远程搜索 参考官方文档 绑定自定义指令 v-el-select-loadmore=“loadmore”

    2024年02月14日
    浏览(46)
  • vue+element-UI实现跟随滚动条加载表格数据

    el-table当数据量大的时候,实现滚动到底部后加载数据,直接上js代码,有其他需求请各自更改  第一步、在data中定义两个数组 第二步、在数据发生改变的方法中先循环存放一部分数据用于页面显示 第三步、在mounted监听滚动事件

    2024年02月16日
    浏览(51)
  • vue监听element-ui的table表格滚动事件

    这篇文章主要是讲述“如何监听element-ui table滚动事件”,按我自己尝试的方法去实现。 需求分析: 前两天做项目遇到一个问题,数据量大,然后表格渲染的很慢,而且很卡怎么办?有什么优化的方式? 那无非就是两种方法。 先加载一屏表格的数据,之后触底加载新的数据

    2024年02月12日
    浏览(43)
  • element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动

    是因为el-table__fixed或el-table__fixed-right有了合计之后把 el-table__body-wrapper层覆盖 el-table__fixed或el-table__fixed-right层级较高 因此点击滚动条失效 解决方法: 若想设置滚动条样式 若想合并合计行的列

    2024年02月15日
    浏览(36)
  • Vue, Element-UI 滚动条: el-scrollbar 基本使用

    参与修改前端项目(Vue, Element-UI),添加用户体验性需求,只涉及页面UI,未涉及数据交互 为一个窗口添加滑动栏 使用el-scrollbar 框架 注意 1,默认xy都有滑动栏,添加以下代码可以隐藏x轴的滑动栏 2,style中 1). 必须去掉scoped,否则overflow-x: hidden失效 2.)外包一个div 来减少

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包