位置: IT常识 - 正文

vue实现列表自动滚动的方式(二)(vue每一列内容过多自动换行)

编辑:rootadmin
vue实现列表自动滚动的方式(二)

推荐整理分享vue实现列表自动滚动的方式(二)(vue每一列内容过多自动换行),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue列表自动滚动,vue自动生成表单,vue实现列表组件,vue 自动执行方法,vue实现列表组件,vue表格动态列,vue列表自动滚动,vue 列表,内容如对您有帮助,希望把文章链接给更多的朋友!

        接上一章的内容继续讲,本次的主题是用vue实现列表有间隔的平滑滚动。

        那么按照惯例,我们还是先来分析问题。还是以向上滚动举例,每隔三秒列表滚动一行。先不考虑平滑的问题,如果只是让列表每隔三秒向上滚动一行,这其实很简单,各位也猜到了,按我的习惯,还是用定时器来解决。

        设置定时器,每三秒,让列表向上移动一行的高度,然后当最后一条数据出现时,在下一个三秒后,恢复到初始状态。

vue实现列表自动滚动的方式(二)(vue每一列内容过多自动换行)

        下面是上面描述的代码实现:

tableTimerFun() { var count = 0; //每滚动一次,count加1 //tableList是列表的数据对象,maxCanSee代表可视范围内的最大完整数据条数 if (this.tableList.length > this.maxCanSee) { this.tableTimer = setInterval(() => { //如果还没滚动到最后一条数据,则列表向上移动以上的高度 if (count < this.tableList.length - this.maxCanSee) { this.tableTop -= this.tableLineHeight; //tableLineHeight代表列表中一行的高度 count++; //每滚动一次,count加1 } else { //如果滚动到最后一条,则恢复初始状态 count = 0; this.tableTop = 0; } }, 3000); } },

        上面的内容已经实现了列表间隔一段时间滚动,接下来就是解决平滑的问题。这次我们不像上一章一样让列表每隔0.1s向上滚动1个像素,用高频位移创造平滑移动的视觉效果。这次我们直接用css来处理。

        css中有个非常好用的动态样式写法 transition,它可以让其渲染的对象在位置、尺寸等发生变化时,平滑的变化。所以我们直接让列表的容器获得以下样式:

transition: all 0.5s;

        偷懒可以直接写all,如果你有特定的需求或者只让某种样式平滑变化,还是去看官方文档,这里我不多说明。0.5s就是变化的时间。

        至此,用vue实现列表有间隔的平滑滚动其实已经实现了,但还有瑕疵,就是当最后一条数据出现,然后重置初始状态时,列表会快速滚动到列表头部。其实也不难理解,按上面的写法,正常情况都是向上移动一行的高度,而最后一条重置到初始状态时却移动了接近整个列表的高度。所以这个过程中会看到列表快速滚动。说是瑕疵但也不是瑕疵,看具体需求。有解决方案,这个放到下一篇文章讲。

        剩下的其实就是做数据大屏的开发要考虑数据不足的情况,举个例子,可视范围内列表最多现实6条,但调接口只显示了3条,这时候列表其实时不需要滚动的,这个放到以后讲,但是下面的完整代码中有,有兴趣的可以提前了解一下。

        下面是完整代码,还是那句话:下面的代码直接粘贴运行不会运行成功,因为下面的完整代码涉及接口调用,但所有功能已经一步到位,希望在看的你能通过注释更多地去理解,而不是简单地复制粘贴。希望能对你有所帮助。

<template> <div class="orderProcess"> <div class="loading_div" v-show="!showFlag"> <!-- Loading样式自己写,不需要,直接删除即可 --> <div>Loading...</div> </div> <div class="success_info_body" v-show="showFlag"> <div class="table_head"> <div class="tr1 tr">订单号</div> <div class="tr2 tr">项目名称</div> <div class="tr3 tr">需求方量</div> <div class="tr4 tr">预交付日期</div> <div class="tr5 tr">进度</div> </div> <div class="table_body"> <!-- tableTop随时间推移不对增减,即列表不断往上 --> <div class="table_list" :style="{top: tableTop + 'px'}"> <div class="tr_div" v-for="(item,index) in tableList" :key="index" :class="{'exception_style_tr':item.overDays>6 && item.process < 100}" > <div class="tr1 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" >{{item.orderNo}}</div> <div class="tr2 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" >{{item.projectName}}</div> <div class="tr3 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" v-if="item.needVol!='-'&&item.needVol!='无法计算'" >{{Number(item.needVol).toFixed(3)}} m³</div> <div class="tr3 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" v-else >-</div> <div class="tr4 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" >{{item.completeDate}}</div> <div class="tr5 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" v-if="item.process!='-'" >{{Number(item.process).toFixed(2)}} %</div> <div class="tr5 tr" :class="{'exception_style':item.overDays>6 && item.process < 100, 'notice_style':item.overDays>0 && item.overDays<7 && item.process < 100}" v-else >-</div> </div> </div> </div> </div> </div></template><script>export default { data() { return { tableTimer: null, tableTop: 0, //列表向上移动的像素 tableList: [], //tableList是列表的数据对象 showFlag: false, componentTimer: null, maxCanSee: 6, //maxCanSee代表可视范围内的最大完整数据条数 tableLineHeight: 45 //tableLineHeight代表列表中一行的高度 }; }, props: ["activeFactoryId"], watch: { activeFactoryId(val, oldVal) { clearInterval(this.componentTimer); this.bsGetOrderProcessList(); this.componentTimerFun(); } }, beforeDestroy() { clearInterval(this.componentTimer); clearInterval(this.tableTimer); }, mounted() { }, methods: { bsGetOrderProcessList() { clearInterval(this.tableTimer); this.tableTop = 0; if (this.activeFactoryId != "") { this.showFlag = false; this.$ajax({ method: "get", url: `` //接口地址,不公开 }) .then(res => { this.tableList = res.data.data; this.showFlag = true; this.actionFun(); }) .catch(function(err) { console.log("bsGetOrderProcessList error!"); }); } }, actionFun() { if (this.tableList.length > 6) { this.tableTimerFun(); } else { this.fillTableList(); } this.showFlag = true; }, fillTableList() { var addLength = this.maxCanSee - this.tableList.length; for (var i = 0; i < addLength; i++) { this.tableList.push({ orderNo: "-", projectName: "-", needVol: "-", completeDate: "-", process: "-" }); } }, tableTimerFun() { var count = 0; //每滚动一次,count加1 if (this.tableList.length > this.maxCanSee) { //tableList是列表的数据对象,maxCanSee代表可视范围内的最大完整数据条数 this.tableTimer = setInterval(() => { if (count < this.tableList.length - this.maxCanSee) { //如果还没滚动到最后一条数据,则列表向上移动以上的高度 this.tableTop -= this.tableLineHeight; //tableLineHeight代表列表中一行的高度 count++; //每滚动一次,count加1 } else { //如果滚动到最后一条,则恢复初始状态 count = 0; this.tableTop = 0; } }, 3000); } }, componentTimerFun() { this.componentTimer = setInterval(() => { this.bsGetOrderProcessList(); }, 3600000); } }};</script><style scoped>.orderProcess { width: 600px; height: 313px;}.loading_div { color: #eee; padding-top: 100px;}.table_head { width: 100%; height: 30px; line-height: 30px; background: rgba(90, 127, 200, 0.5); display: flex; color: #eee; text-align: center; font-size: 15px;}.tr1 { width: 25%;}.tr2 { width: 25%;}.tr3 { width: 18%;}.tr4 { width: 18%;}.tr5 { flex: 1;}.tr { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box; padding: 0 5px; text-align: center; font-size: 14px;}.table_body { width: 100%; height: 270px; overflow: hidden; position: relative;}.table_list { width: 100%; position: absolute; transition: all 0.5s;}.tr_div { width: 100%; display: flex; color: #eee; text-align: center; line-height: 45px; font-size: 13px;}.exception_style_tr { animation: exception_style_tr 0.8s linear; -moz-animation: exception_style_tr 0.8s linear; -webkit-animation: exception_style_tr 0.8s linear; -o-animation: exception_style_tr 0.8s linear; animation-iteration-count: infinite; -webkit-animation-iteration-count: infinite;}@keyframes exception_style_tr { 0% { background: rgba(3, 145, 167, 0.1); } 50% { background: rgba(250, 4, 4, 0.15); } 100% { background: rgba(3, 145, 167, 0.1); }}@-moz-keyframes exception_style_tr { 0% { background: rgba(3, 145, 167, 0.1); } 50% { background: rgba(250, 4, 4, 0.15); } 100% { background: rgba(3, 145, 167, 0.1); }}@-webkit-keyframes exception_style_tr { 0% { background: rgba(3, 145, 167, 0.1); } 50% { background: rgba(250, 4, 4, 0.15); } 100% { background: rgba(3, 145, 167, 0.1); }}@-o-keyframes exception_style_tr { 0% { background: rgba(3, 145, 167, 0.1); } 50% { background: rgba(250, 4, 4, 0.15); } 100% { background: rgba(3, 145, 167, 0.1); }}.exception_style { font-weight: bold; animation: exception_style 0.8s linear; -moz-animation: exception_style 0.8s linear; -webkit-animation: exception_style 0.8s linear; -o-animation: exception_style 0.8s linear; animation-iteration-count: infinite; -webkit-animation-iteration-count: infinite;}@keyframes exception_style { 0% { color: #eee; } 50% { color: #fa0404; } 100% { color: #eee; }}@-moz-keyframes exception_style { 0% { color: #eee; } 50% { color: #fa0404; } 100% { color: #eee; }}@-webkit-keyframes exception_style { 0% { color: #eee; } 50% { color: #fa0404; } 100% { color: #eee; }}@-o-keyframes exception_style { 0% { color: #eee; } 50% { color: #fa0404; } 100% { color: #eee; }}.notice_style { font-weight: bold; color: #d1ce02;}</style>

        最后是效果视频:

本文链接地址:https://www.jiuchutong.com/zhishi/290814.html 转载请保留说明!

上一篇:行走在奥卡万戈河中的大象,博茨瓦纳,非洲南部 (© Markus Pavlowsky/Getty Images)

下一篇:海峡群岛附近巨藻林中的加利福尼亚海狮 (© Nature Picture Library/Alamy)(海峡群岛属于哪个洲)

  • airpodsmax重新配对方法(airpods2重新配对需要按多少秒)

    airpodsmax重新配对方法(airpods2重新配对需要按多少秒)

  • word字间距如何调整(word 如何 字间距)

    word字间距如何调整(word 如何 字间距)

  • 华为nova7se支不支持nfc(华为nova7se支不支持OTG)

    华为nova7se支不支持nfc(华为nova7se支不支持OTG)

  • 腾讯视频网址是什么(腾讯视频的网址)

    腾讯视频网址是什么(腾讯视频的网址)

  • 怎样让微信图片不折叠(怎样让微信图片不旋转屏幕)

    怎样让微信图片不折叠(怎样让微信图片不旋转屏幕)

  • 京东包邮条件(京东买东西包邮)

    京东包邮条件(京东买东西包邮)

  • 抖音流量突然减少是为什么(抖音流量突然减少怎么办)

    抖音流量突然减少是为什么(抖音流量突然减少怎么办)

  • 拼多多品质退款率对店铺有影响吗(拼多多品质退款率新规)

    拼多多品质退款率对店铺有影响吗(拼多多品质退款率新规)

  • 误删大文件不在回收站(误删了大文件怎么办)

    误删大文件不在回收站(误删了大文件怎么办)

  • qq可以发文件夹么(qq发文件夹进度条不动)

    qq可以发文件夹么(qq发文件夹进度条不动)

  • 取景器和屏幕取景区别(取景器和屏幕取景)

    取景器和屏幕取景区别(取景器和屏幕取景)

  • 怎么截微信语音给人听(怎么截微信语音聊天长图)

    怎么截微信语音给人听(怎么截微信语音聊天长图)

  • 华为微信黑暗模式怎么设置(华为微信黑暗模式怎么打开)

    华为微信黑暗模式怎么设置(华为微信黑暗模式怎么打开)

  • 微信缩略图和大图区别(微信缩略图和原图不一样)

    微信缩略图和大图区别(微信缩略图和原图不一样)

  • 注册抖音新号需要注意些什么(注册抖音新号需要多少钱)

    注册抖音新号需要注意些什么(注册抖音新号需要多少钱)

  • oppor17长宽高多少(oppor 17长宽)

    oppor17长宽高多少(oppor 17长宽)

  • 手机账号是什么(华为手机账号是什么)

    手机账号是什么(华为手机账号是什么)

  • 2018款ipad是第几代(2018款ipad是什么型号)

    2018款ipad是第几代(2018款ipad是什么型号)

  • ipad pro一共有几款(ipad pro一共有几代什么区别)

    ipad pro一共有几款(ipad pro一共有几代什么区别)

  • 可以在苹果手机重新设置ID账号和密码吗(华为蓝牙耳机可以在苹果手机)

    可以在苹果手机重新设置ID账号和密码吗(华为蓝牙耳机可以在苹果手机)

  • 手机卡的原因如何解决(手机卡是什么原因导致)

    手机卡的原因如何解决(手机卡是什么原因导致)

  • 喜马拉雅会员下载后非会员能听吗(喜马拉雅会员2020)

    喜马拉雅会员下载后非会员能听吗(喜马拉雅会员2020)

  • 苹果11天气怎么设置(苹果11天气怎么设置到桌面)

    苹果11天气怎么设置(苹果11天气怎么设置到桌面)

  • qq音乐会员可以共享吗(qq音乐会员可以退款吗)

    qq音乐会员可以共享吗(qq音乐会员可以退款吗)

  • 苹果怎么取消拍照声音(苹果怎么取消拍照锐化)

    苹果怎么取消拍照声音(苹果怎么取消拍照锐化)

  • 电话总是在通话中怎么了(打电话总在通话中怎么办)

    电话总是在通话中怎么了(打电话总在通话中怎么办)

  • 抖音带字视频怎么弄的(抖音带视频怎么弄的)

    抖音带字视频怎么弄的(抖音带视频怎么弄的)

  • 荣耀20怎么复制门禁卡(荣耀20怎么复制门禁卡怎样复制门禁卡)

    荣耀20怎么复制门禁卡(荣耀20怎么复制门禁卡怎样复制门禁卡)

  • 最新win102004/2009激活秘钥推荐 附激活工具(最新早上好图片大全集)

    最新win102004/2009激活秘钥推荐 附激活工具(最新早上好图片大全集)

  • vue2 自定义 el-radio-button 的样式并设置默认值的方法

    vue2 自定义 el-radio-button 的样式并设置默认值的方法

  • 停车费手撕票如何填写申报表
  • 一般纳税人混凝土税率
  • 本年已交税费怎么算
  • 退回以前年度教育附加费
  • 建筑业属于货物行业吗
  • 政府补助需要交哪些税
  • 正常工资薪金所得是什么意思
  • 合伙企业投资收益
  • 连号发票不许报销的具体发票类型
  • 个体生产经营所得税税率表
  • 完税证明必须本人办理吗
  • 上季度资产总额填错了怎么办
  • 专用发票过期未抵扣怎么处理?
  • 视同销售收入计入会计利润吗
  • 应付利息借贷
  • 事业单位开展活动的意义
  • 托收承付是收到钱了吗
  • 有未弥补亏损本季度有盈利要计提递延所得税资产吗?
  • 服务的进项税
  • 培训过程中出现的问题及解决办法
  • 个人出租商业用房取得的所得
  • 地方教育费附加计入什么科目
  • 企业收取房屋维修费用
  • 这个月只开了销项负数怎么办
  • 个人缴付年金的扣除限额
  • 工资上月计提多了,这个月怎么冲
  • 发票备注栏填写要求
  • 华为手机悬浮导航是干什么用
  • 百内国家公园塔状尖峰
  • win7系统网络一直转圈,什么都打不开
  • win10双系统删除linux
  • 劳务资质办理需要什么条件
  • php常用设计模式(大总结)
  • 现在学修电脑怎么样
  • 操作系统的类型和比较
  • 初品官网
  • 应酬用的香烟
  • 分红财务做账
  • laravel视频教程
  • Java8 Stream流Collectors.toMap当key重复时报异常(IllegalStateException)
  • 未确认融资费用账务处理
  • 长期股权投资追加投资
  • 收回前欠货款会导致资产总额减少吗
  • 企业向慈善机构捐款会计分录
  • 企业年报网上申报入口贵州
  • 报销用别的发票抵用怎么入账
  • 个人取得的劳务报酬所得,如何缴纳个税
  • 开票品名不一样有什么关系
  • 小企业会计准则调整以前年度费用分录
  • 高速公路通行费增值税税率
  • 编制利润表计算公式
  • 百旺 税控盘
  • 劳务报酬所得项目
  • 天使投资
  • 出口退税是什么
  • 什么是公司财务管理中的一个重要组成部分
  • 汇算清缴需要传票么
  • 高新企业研发收入占总收入比例怎么算
  • 春节重要通知发放工资
  • 未收到投资款可以确认实收资本吗
  • 需要分摊的费用怎么做账
  • 固定资产计提完折旧报废的账务处理
  • 保险费的增值税属于什么税
  • 企业其他应收款余额非常大的原因
  • win10收不到短信验证码
  • Windows 2008 R2的C盘空间不够的解决方法
  • ios8.4.1完美越狱教程
  • win7专用字符编辑程序
  • win8 开机后无法进入系统
  • 优质安卓应用
  • unity3d模型怎么制作
  • react和nodejs
  • canvas的原理
  • unity3d颜色
  • 在jquery中fadein
  • 增值税纳税申报时间
  • 小规模纳税人营业额
  • 代理记账的账本是什么
  • 江西省国家税务局李德平
  • 药店开给个人的增值税发票是什么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设