viewMonitor.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <div class="monitor" :style="{ height: height + 'px', width: width + 'px' }" >
  3. <div class="main-video">
  4. <video
  5. :src="selectedVideo"
  6. controls
  7. @play="handlePlay"
  8. :width="width*2/3"
  9. :height="height*2/3"
  10. autoplay
  11. ></video>
  12. <!--{{selectedVideo}}-->
  13. </div>
  14. <div class="video-list">
  15. <div
  16. v-for="(video, index) in videoList"
  17. :key="index"
  18. class="video-item"
  19. :class="{ active: video === (selectedVideo || videoList[0]) }"
  20. @click="selectVideo(video)"
  21. >
  22. <img :src="imgList[index]" alt="" />
  23. <div class="video-title">{{ getTitleFromPath(video) }}</div>
  24. </div>
  25. </div>
  26. </div>
  27. </template>
  28. <script>
  29. export default {
  30. name: "viewMonitor",
  31. props: {
  32. height: {
  33. type: Number,
  34. default: 800,
  35. },
  36. width: {
  37. type: Number,
  38. default: 1200,
  39. },
  40. },
  41. data() {
  42. return {
  43. videoList: [require("../assets/video/monitor1.mp4"), require("../assets/video/GrassMontior.mp4")],
  44. imgList: [
  45. require("../assets/imgs/bg.jpg"),
  46. require("../assets/imgs/bg.jpg"),
  47. ],
  48. selectedVideo: require("../assets/video/monitor1.mp4"),//没用
  49. };
  50. },
  51. methods: {
  52. selectVideo(video) {
  53. this.selectedVideo = video;
  54. },
  55. getTitleFromPath(path) {
  56. return path.split("/").pop().split(".")[0];
  57. },
  58. handlePlay() {
  59. // 可以在这里实现其他功能,如统计播放次数等
  60. },
  61. },
  62. };
  63. </script>
  64. <style>
  65. .monitor {
  66. display: flex;
  67. gap: 20px;
  68. padding: 20px;
  69. }
  70. .main-video {
  71. width: 70%;
  72. max-width: 2000px;
  73. }
  74. .video-list {
  75. transform: translateY(10%);
  76. width: 30%;
  77. max-width: 800px;
  78. display: flex;
  79. flex-direction: column;
  80. gap: 10px;
  81. }
  82. .video-item {
  83. display: flex;
  84. align-items: center;
  85. gap: 10px;
  86. padding: 10px;
  87. background-color: rgba(0, 0, 0, 0.1);
  88. border-radius: 5px;
  89. cursor: pointer;
  90. }
  91. .video-item.active {
  92. opacity: 0.5;
  93. }
  94. .video-item img {
  95. width: 100px;
  96. height: 60px;
  97. object-fit: cover;
  98. }
  99. .video-title {
  100. font-weight: bold;
  101. flex: 1;
  102. text-align: left;
  103. }
  104. </style>