情不知从何起,一往而情深
排名
6
文章
199
粉丝
4
评论
3
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

vue自定义table表实现内容上下循环滚动

4334人阅读 2023/3/15 16:10 总访问:1110393 评论:0 收藏:0 手机
分类: 前端

原文:https://blog.csdn.net/weixin_43123984/article/details/125003600

处理了一下只显示正确的数据

  1. <template>
  2. <div class="left">
  3. <div class="table">
  4. <div class="table-header">
  5. <div class="table-header-item-title">名称</div>
  6. <div class="table-header-item-title">状态</div>
  7. <div class="table-header-item-title">数据标题1</div>
  8. <div class="table-header-item-title">数据标题2</div>
  9. </div>
  10. <div class="scrollWrap" :style="{
  11. height: scrollWrapHeight + 'px',
  12. overflowY: 'hidden',
  13. }">
  14. <div :class="scrollNum > 1 ? 'scroll' : ''" :style="{
  15. animationDuration: time + 's',
  16. }" v-for="(a, index) in scrollNum" :key="index">
  17. <div class="table-bodySuccess" v-for="(item, index) in successData" :key="index">
  18. <div class="table-body-item-title">
  19. {{ item.name }}
  20. </div>
  21. <div class="table-body-item-title">
  22. <div class="circle"></div>
  23. </div>
  24. <div class="table-body-item-title">{{ item.tampNum }}℃</div>
  25. <div class="table-body-item-title">{{ item.eleNum }}A</div>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. export default {
  34. name: 'ZuxiaTableScroll',
  35. data() {
  36. return {
  37. // 调节滚动速率
  38. time: 15,
  39. successData: [
  40. { name: 'aaa嘿嘿和哈哈哈', status: 1, tampNum: 10, eleNum: 15 },
  41. { name: 'bbb', status: 1, tampNum: 10, eleNum: 15 },
  42. { name: 'ccc', status: 1, tampNum: 10, eleNum: 15 },
  43. { name: 'ddd', status: 1, tampNum: 10, eleNum: 15 },
  44. { name: 'eee', status: 1, tampNum: 10, eleNum: 15 },
  45. { name: 'fff', status: 1, tampNum: 10, eleNum: 15 },
  46. { name: 'ggg', status: 1, tampNum: 10, eleNum: 15 },
  47. { name: 'hhh', status: 1, tampNum: 10, eleNum: 15 },
  48. { name: 'iii', status: 1, tampNum: 10, eleNum: 15 },
  49. { name: 'jjj', status: 1, tampNum: 10, eleNum: 15 },
  50. { name: 'kkk', status: 1, tampNum: 10, eleNum: 15 },
  51. ],
  52. }
  53. },
  54. computed: {
  55. errBgColor: function () {
  56. return function (index) {
  57. if (index % 2 === 0) {
  58. return '#e8f7ff'
  59. } else {
  60. return '#ffffff'
  61. }
  62. }
  63. },
  64. // successBgColor: function () {
  65. // return function (index) {
  66. // if (this.errData.length % 2 === 0) {
  67. // if (index % 2 === 0) {
  68. // return '#e8f7ff'
  69. // } else {
  70. // return '#ffffff'
  71. // }
  72. // } else {
  73. // if (index % 2 === 0) {
  74. // return '#ffffff'
  75. // } else {
  76. // return '#e8f7ff'
  77. // }
  78. // }
  79. // }
  80. // },
  81. // 滚动层高度
  82. scrollWrapHeight: function () {
  83. // left高度 - table-header高度 - table-bodyError高度 * 个数
  84. return 600 - 52
  85. },
  86. // 滚动层份数,当内容溢出scrollWrapHeight,复制两份,添加滚动动画
  87. // 否则就一份,不填加滚动动画
  88. scrollNum: function () {
  89. let successHeight = this.successData.length * 52
  90. if (successHeight > this.scrollWrapHeight) {
  91. return 2
  92. } else {
  93. return 1
  94. }
  95. },
  96. },
  97. }
  98. </script>
  99. <style lang="scss" scoped>
  100. .left {
  101. width: 520px;
  102. height: 600px;
  103. background-color: #fab4b4;
  104. border-bottom: 1px solid red;
  105. position: relative;
  106. .table-header {
  107. width: 100%;
  108. background-color: skyblue;
  109. color: #e1f3ff;
  110. font-size: 16px;
  111. font-weight: 700;
  112. display: flex;
  113. .table-header-item-title {
  114. height: 52px;
  115. width: 100%;
  116. display: flex;
  117. justify-content: center;
  118. align-items: center;
  119. }
  120. }
  121. .table-bodyError,
  122. .table-bodySuccess {
  123. width: 100%;
  124. color: red;
  125. font-size: 16px;
  126. display: flex;
  127. .table-body-item-title {
  128. width: 100%;
  129. height: 52px;
  130. display: flex;
  131. justify-content: center;
  132. align-items: center;
  133. .circle {
  134. width: 12px;
  135. height: 12px;
  136. background: #ea4141;
  137. border-radius: 50%;
  138. }
  139. }
  140. }
  141. .table-bodySuccess {
  142. color: #000;
  143. .table-body-item-title {
  144. .circle {
  145. background: #29b153;
  146. }
  147. }
  148. }
  149. .scrollWrap::-webkit-scrollbar {
  150. width: 0 !important;
  151. }
  152. .scroll {
  153. animation: scrollData 10s infinite linear;
  154. }
  155. @keyframes scrollData {
  156. from {
  157. transform: translateY(0px);
  158. }
  159. to {
  160. transform: translateY(-100%);
  161. }
  162. }
  163. }
  164. </style>

可以鼠标放上去停止滚动

  1. <template>
  2. <div class="left">
  3. <div class="table">
  4. <div class="table-header">
  5. <div class="table-header-item-title">名称</div>
  6. <div class="table-header-item-title">状态</div>
  7. <div class="table-header-item-title">数据标题1</div>
  8. <div class="table-header-item-title">数据标题2</div>
  9. </div>
  10. <div class="scrollWrap" :style="{
  11. height: scrollWrapHeight + 'px',
  12. overflowY: 'hidden',
  13. }">
  14. <div ref="content" @mouseleave="toStartRun" @mouseenter="toPausedRun" :class="[scrollNum > 1 ? 'scroll' : '',animationPlayState]" :style="{
  15. animationDuration: time + 's',
  16. }" v-for="(a, index) in scrollNum" :key="index">
  17. <div class="table-bodySuccess" v-for="(item, index) in successData" :key="index">
  18. <div class="table-body-item-title">
  19. {{ item.name }}
  20. </div>
  21. <div class="table-body-item-title">
  22. <div class="circle"></div>
  23. </div>
  24. <div class="table-body-item-title">{{ item.tampNum }}℃</div>
  25. <div class="table-body-item-title">{{ item.eleNum }}A</div>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. export default {
  34. name: 'ZuxiaTableScroll',
  35. data() {
  36. return {
  37. animationPlayState:"animationPlayStateRun",
  38. // 调节滚动速率
  39. time: 15,
  40. successData: [
  41. { name: 'aaa嘿嘿和哈哈哈', status: 1, tampNum: 10, eleNum: 15 },
  42. { name: 'bbb', status: 1, tampNum: 10, eleNum: 15 },
  43. { name: 'ccc', status: 1, tampNum: 10, eleNum: 15 },
  44. { name: 'ddd', status: 1, tampNum: 10, eleNum: 15 },
  45. { name: 'eee', status: 1, tampNum: 10, eleNum: 15 },
  46. { name: 'fff', status: 1, tampNum: 10, eleNum: 15 },
  47. { name: 'ggg', status: 1, tampNum: 10, eleNum: 15 },
  48. { name: 'hhh', status: 1, tampNum: 10, eleNum: 15 },
  49. { name: 'iii', status: 1, tampNum: 10, eleNum: 15 },
  50. { name: 'jjj', status: 1, tampNum: 10, eleNum: 15 },
  51. { name: 'kkk', status: 1, tampNum: 10, eleNum: 15 },
  52. ],
  53. }
  54. },
  55. computed: {
  56. errBgColor: function () {
  57. return function (index) {
  58. if (index % 2 === 0) {
  59. return '#e8f7ff'
  60. } else {
  61. return '#ffffff'
  62. }
  63. }
  64. },
  65. // 滚动层高度
  66. scrollWrapHeight: function () {
  67. // left高度 - table-header高度 - table-bodyError高度 * 个数
  68. return 600 - 52
  69. },
  70. // 滚动层份数,当内容溢出scrollWrapHeight,复制两份,添加滚动动画
  71. // 否则就一份,不填加滚动动画
  72. scrollNum: function () {
  73. let successHeight = this.successData.length * 52
  74. if (successHeight > this.scrollWrapHeight) {
  75. return 2
  76. } else {
  77. return 1
  78. }
  79. },
  80. },
  81. methods: {
  82. toPausedRun()
  83. {
  84. //alert(11)
  85. //this.$refs.content.style.backgroundColor = 'red'
  86. //this.$refs.content.style.animationPlayState="paused"
  87. this.animationPlayState = "animationPlayStatePaused"
  88. },
  89. toStartRun()
  90. {
  91. this.animationPlayState = "animationPlayStateRun"
  92. //alert(22)
  93. }
  94. }
  95. }
  96. </script>
  97. <style lang="scss" scoped>
  98. .left {
  99. width: 520px;
  100. height: 600px;
  101. background-color: #fab4b4;
  102. border-bottom: 1px solid red;
  103. position: relative;
  104. .table-header {
  105. width: 100%;
  106. background-color: skyblue;
  107. color: #e1f3ff;
  108. font-size: 16px;
  109. font-weight: 700;
  110. display: flex;
  111. .table-header-item-title {
  112. height: 52px;
  113. width: 100%;
  114. display: flex;
  115. justify-content: center;
  116. align-items: center;
  117. }
  118. }
  119. .table-bodyError,
  120. .table-bodySuccess {
  121. width: 100%;
  122. color: red;
  123. font-size: 16px;
  124. display: flex;
  125. .table-body-item-title {
  126. width: 100%;
  127. height: 52px;
  128. display: flex;
  129. justify-content: center;
  130. align-items: center;
  131. .circle {
  132. width: 12px;
  133. height: 12px;
  134. background: #ea4141;
  135. border-radius: 50%;
  136. }
  137. }
  138. }
  139. .table-bodySuccess {
  140. color: #000;
  141. .table-body-item-title {
  142. .circle {
  143. background: #29b153;
  144. }
  145. }
  146. }
  147. .scrollWrap::-webkit-scrollbar {
  148. width: 0 !important;
  149. }
  150. .animationPlayStateRun
  151. {
  152. animation-play-state:running;
  153. }
  154. .animationPlayStatePaused
  155. {
  156. animation-play-state:paused;
  157. }
  158. .scroll {
  159. animation: scrollData 10s infinite linear;
  160. }
  161. @keyframes scrollData {
  162. from {
  163. transform: translateY(0px);
  164. }
  165. to {
  166. transform: translateY(-100%);
  167. }
  168. }
  169. }
  170. </style>

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue.js+Layer实现表格数据绑定与更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

vue.js 实现省市联动

HTML代码&lt;divid=&quot;pro_citys&quot;&gt; 省:&lt;selectid=&quot;provice&quot;v-on:change=&quot;prochange()&quo...

vue.js常见问题

一:花括号当做字符串显示的问题1:检查下绑定到vue.js的id是否重复,如果id重复了,就有可能存在这种问题,因为有可能把数...

vue.js常用指令

v-html可以把字符串当成一个html来渲染,而不是原样输出Html类似.net mvc中的@Html.Raw()方法&lt;divv-html=&quot;item.tit...

干货!div滚动到一定位置就固定他。vue中实现一侧滚动到底部就固定

尊重原创:转载请注名出处div滚动到一定位置就固定他,例如左边的内容很多,右边的内容很少,如果不处理滚动到一定位置后右...

vue.js常用指令,事件绑定等,vue过滤器解析状态过滤器多个参数。vue表格状态解析。vue解析类型,element ui解析类型,状态,el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

vue.js if用法

vue.js if可以做一些判断例如我们要把下面这个输出varvm=newVue({ el:&quot;#content&quot;, data:{ titles:[&quot;小明...

vue.js 学习日记第一章-安装vue开发环境

官网:https://cn.vuejs.org/v2/guide/ 这是一篇学习性文章,不定时更新,用来记录我学习vue.js的过程。 首先,是v...

vue.js 学习日记第二章-在vue中编写function及一些简单指令

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第一章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第三章-vue中的简单事件及事件修饰符

官网:https://cn.vuejs.org/v2/guide/ vue.js 学习日记第二章:http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第四章-vue中文本框数据获取与绑定及computed计算属性

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第三章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第五章-v-if和v-for指令的使用方式

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第四章: http://www.tnblog.net/18323015640/article/details/2...

vue.js 学习日记第六章-vue组件初步学习

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第五章: http://www.tnblog.net/18323015640/article/details/2...

vue.js学习日记第七章-搭建脚手架

官网:https://cn.vuejs.org/v2/guide/ vue.js学习日记第六章: http://www.tnblog.net/18323015640/article/details/2...

vue实现好友选中效果

逛过vue官网肯定会发现一个有趣的指令“v-for”,相比与以前拼接html代码确实要上档次一点,而且减少了工作量,先看一波效...

js时间格式化vue.js时间格式化,带T 时间格式化

也可以借助moment库, 参考:https://www.tnblog.net/aojiancc2/article/details/8079moment库有点大,推荐可以使用day.js...