video-mask.nvue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <div class="wrapper">
  3. <list class="list">
  4. <cell v-for="(item, index) in lists" :key="index" :ref="'item' + index" class="cell">
  5. <text class="name">{{item.name}}:</text>
  6. <text class="content">{{item.content}}</text>
  7. </cell>
  8. </list>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. data() {
  14. return {
  15. lists: [],
  16. interval: null,
  17. yourTexts: [
  18. {
  19. name: '学员A',
  20. content: '老师讲的真好',
  21. }, {
  22. name: '学员B',
  23. content: 'uni-app值得学习',
  24. }, {
  25. name: '学员C',
  26. content: '老师,还有实战例子吗?',
  27. }, {
  28. name: '学员D',
  29. content: '老师,请问是不是要先学会vue才能学uni-app?',
  30. }, {
  31. name: '学员E',
  32. content: '受教了,uni-app太牛了',
  33. }
  34. ],
  35. }
  36. },
  37. created() {
  38. const vm = this;
  39. uni.$on('play-video', (data) => {
  40. if(data.status === 'open'){
  41. this.addItem();
  42. }else{
  43. this.closeItem();
  44. }
  45. })
  46. },
  47. beforeDestroy(){
  48. uni.$off('play-video')
  49. this.closeItem()
  50. },
  51. methods: {
  52. addItem() {
  53. const vm = this;
  54. vm.lists = [{
  55. name: '学员E',
  56. content: '受教了,uni-app太牛了',
  57. }];
  58. const dom = weex.requireModule('dom')
  59. vm.interval = setInterval(() => {
  60. if(vm.lists.length > 15) {
  61. vm.lists.unshift();
  62. }
  63. vm.lists.push({
  64. name: vm.yourTexts[vm.lists.length%4].name,
  65. content: vm.yourTexts[vm.lists.length%4].content
  66. });
  67. if(vm.lists.length > 5) {
  68. vm.$nextTick(() => {
  69. if(vm.$refs['item' + (vm.lists.length - 1)]){
  70. dom.scrollToElement(vm.$refs['item' + (vm.lists.length - 1)][0]);
  71. }
  72. });
  73. }
  74. }, 3500);
  75. },
  76. closeItem() {
  77. if(this.interval) clearInterval(this.interval);
  78. }
  79. }
  80. }
  81. </script>
  82. <style>
  83. .wrapper {
  84. position: relative;
  85. flex: 1;
  86. background-color: transparent;
  87. }
  88. .list {
  89. position: absolute;
  90. top: 0;
  91. left: 0;
  92. right: 0;
  93. bottom: 0;
  94. background-color: rgba(0, 0, 0, 0.7);
  95. }
  96. .cell {
  97. padding: 10rpx 0;
  98. flex-direction: row;
  99. flex-wrap: nowrap;
  100. }
  101. .name {
  102. flex: 0;
  103. font-size: 20rpx;
  104. margin-right: 20rpx;
  105. color: #FF5A5F;
  106. }
  107. .content {
  108. flex: 1;
  109. font-size: 20rpx;
  110. color: #F4F5F6;
  111. }
  112. </style>