videoViewer.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <template>
  2. <teleport to="body">
  3. <div class="el-image-viewer__wrapper" :tabindex="-1" ref="imageViewer" style="zIndex: 9999;">
  4. <div class="el-image-viewer__mask" @click.self="hideOnModal && $emit('close')"></div>
  5. <span class="el-image-viewer__btn el-image-viewer__close" @click="$emit('close')">
  6. <el-icon><el-icon-close /></el-icon>
  7. </span>
  8. <div class="el-image-viewer__canvas">
  9. <sc-video class="el-image-viewer__img" :src="'/minio' + videoUrl" autoplay></sc-video>
  10. </div>
  11. </div>
  12. </teleport>
  13. </template>
  14. <script>
  15. import "element-plus/es/components/image-viewer/style/css"
  16. export default {
  17. emits: ["close"],
  18. props: {
  19. hideOnModal: { type: Boolean, default: false }, // 是否支持通过点击遮罩层关闭
  20. hideOnEscape: { type: Boolean, default: false }, // 是否支持通过按下ESC关闭
  21. videoUrl: { type: String, default: "" }
  22. },
  23. data() {
  24. return {}
  25. },
  26. created() {
  27. document.addEventListener("keydown", this.keydownHandler);
  28. },
  29. beforeUnmount() {
  30. document.removeEventListener("keydown", this.keydownHandler);
  31. },
  32. methods: {
  33. keydownHandler(e) {
  34. this.hideOnEscape && e.code == "Escape" && this.$emit("close");
  35. e.preventDefault();
  36. }
  37. }
  38. }
  39. </script>
  40. <style lang="scss" scoped>
  41. .el-image-viewer__canvas {
  42. padding: 12%;
  43. }
  44. </style>