当前位置:   article > 正文

Vue之表格循环播放(滚动播放列表)_vue轮播表

vue轮播表

本篇用到的组件 :vue2 和 element-ui

template如下:
  1. <template>
  2. <div @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave">
  3. <el-table :data="tableSave" height="280" border ref="table" :row-class-name="rowStyle">
  4. <el-table-column prop="date" label="TitleA" width="100"> </el-table-column>
  5. <el-table-column prop="name" label="TitleB" width="150"> </el-table-column>
  6. <el-table-column prop="address" label="TitleC" width="150"> </el-table-column>
  7. </el-table>
  8. <button @click="add(1)">A警告</button>
  9. <button @click="add(2)">B警告</button>
  10. <button @click="add(3)">C警告</button>
  11. <button @click="add(4)">紧急警告</button>
  12. </div>
  13. </template>

script如下:
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. // 表格数据
  6. tableData: [
  7. {
  8. date: 'A警告',
  9. name: 'aaa',
  10. address: '111',
  11. type: 'red'
  12. },
  13. {
  14. date: 'B警告',
  15. name: 'bbb',
  16. address: '222',
  17. type: 'yellow'
  18. },
  19. {
  20. date: 'C警告',
  21. name: 'ccc',
  22. address: '333',
  23. type: 'blue'
  24. },
  25. {
  26. date: 'C警告',
  27. name: 'ddd',
  28. address: '444',
  29. type: 'blue'
  30. },
  31. {
  32. date: 'B警告',
  33. name: 'fff',
  34. address: '666',
  35. type: 'yellow'
  36. },
  37. {
  38. date: 'C警告',
  39. name: 'eee',
  40. address: '555',
  41. type: 'blue'
  42. },
  43. ],
  44. tableSave: [],
  45. stack: [],
  46. moveflag: true,
  47. showflag: 0,
  48. };
  49. },
  50. mounted() {
  51. //总数据表判空
  52. if (this.tableData.length > 0) {
  53. //数据量是否需要轮播
  54. if (this.tableData.length > 5) {
  55. for (; this.showflag < 6; this.showflag++) {
  56. this.tableSave[this.showflag] = this.tableData[this.showflag];
  57. }
  58. } else {
  59. this.tableData.forEach(item => {
  60. this.tableSave.push(item)
  61. });
  62. }
  63. }
  64. this.tableShow();
  65. },
  66. methods: {
  67. tableShow() {
  68. const table = this.$refs.table;
  69. const divData = table.bodyWrapper;
  70. let myVar = setInterval(() => {
  71. //是否可移动
  72. if (this.moveflag && this.tableSave.length >= 6) {
  73. // 元素自增距离顶部1像素
  74. divData.scrollTop += 1;
  75. // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
  76. if (divData.clientHeight + divData.scrollTop >= divData.scrollHeight - 10) {
  77. //移除看不见的行
  78. this.tableSave.shift();
  79. //插入轮播、判断插入栈是否有通知
  80. if (this.stack.length != 0) {
  81. let data = this.stack.pop();
  82. //插入轮播列表
  83. this.tableSave.push(data);
  84. //插入总Table表
  85. //this.tableData.push(data);
  86. } else {
  87. //轮播指针重置
  88. if (this.showflag >= this.tableData.length) this.showflag = 0;
  89. //插入指针位数据
  90. this.tableSave.push(this.tableData[this.showflag]);
  91. this.showflag++;
  92. }
  93. // 重置table距离顶部距离
  94. divData.scrollTop = 0;
  95. }
  96. }
  97. }, 30);
  98. },
  99. rowStyle({ row, rowIndex }) {
  100. if (row.type === 'red') {
  101. return 'red_class';
  102. } else if (row.type === 'yellow') {
  103. return 'yellow_class';
  104. } else {
  105. return 'blue_class'
  106. }
  107. },
  108. add(n) {
  109. const table = this.$refs.table;
  110. const divData = table.bodyWrapper;
  111. if (n == 1) {
  112. this.tableData.push({
  113. date: 'red',
  114. name: '红色警告',
  115. address: '红色警告',
  116. type: 'red'
  117. });
  118. this.$notify({
  119. title: '红色警告',
  120. message: '红色警告',
  121. type: 'error',
  122. });
  123. }
  124. if (n == 2) {
  125. this.tableData.push({
  126. date: 'yellow',
  127. name: '黄色警告',
  128. address: '黄色警告',
  129. type: 'yellow',
  130. });
  131. this.$notify({
  132. title: '黄色警告',
  133. message: '黄色警告',
  134. type: 'warning',
  135. });
  136. }
  137. if (n == 3) {
  138. this.tableData.push({
  139. date: 'blue',
  140. name: '蓝色警告',
  141. address: '蓝色警告',
  142. type: 'blue',
  143. });
  144. this.$notify({
  145. title: '蓝色警告',
  146. message: '蓝色警告',
  147. type: 'info',
  148. });
  149. }
  150. if (n == 4) {
  151. this.stack.push({
  152. date: '紧急警告',
  153. name: '紧急警告',
  154. address: '紧急警告',
  155. type: 'red',
  156. });
  157. this.$notify({
  158. title: '紧急警告',
  159. message: '紧急警告',
  160. type: 'error',
  161. });
  162. }
  163. },
  164. handleMouseEnter() {
  165. //鼠标进入
  166. this.moveflag = false;
  167. },
  168. handleMouseLeave() {
  169. //鼠标移出
  170. this.moveflag = true;
  171. }
  172. },
  173. };
  174. </script>

里面还有一点,根据不同数据,显示不同样式。


 style如下:
  1. <style>
  2. .el-table {
  3. background-color: transparent;
  4. }
  5. .el-table tr {
  6. background-color: transparent;
  7. }
  8. .el-table thead {
  9. color: lightblue;
  10. background-color: transparent;
  11. }
  12. .el-table td.el-table__cell,
  13. .el-table th.el-table__cell.is-leaf {
  14. background-color: transparent;
  15. }
  16. .el-table__body-wrapper::-webkit-scrollbar {
  17. width: 0;
  18. }
  19. .el-table--border th.el-table__cell.gutter:last-of-type {
  20. background-color: transparent;
  21. }
  22. .el-table .red_class {
  23. color: red;
  24. background-color: yellow;
  25. }
  26. .el-table .yellow_class {
  27. color: yellow;
  28. background-color: green;
  29. }
  30. .el-table .blue_class {
  31. color: blue;
  32. background-color: white;
  33. }
  34. </style>

这里有两种显示效果,一种是不显示颜色,就会显示透明的表格背景。另一种就是显示颜色,根据不同的数据显示不同的style样式。


效果如下:

 

 


 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/193882
推荐阅读
相关标签
  

闽ICP备14008679号