videos.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <view v-show="!isSortType">
  3. <common-wrapper :config="configData">
  4. <view class="video-box" id="myVideo" :style="[videoStyle]">
  5. <video
  6. class="video"
  7. object-fit="cover"
  8. :src="dataConfig.videoConfig.url"
  9. :poster="dataConfig.imgConfig.url"
  10. controls
  11. ></video>
  12. </view>
  13. </common-wrapper>
  14. </view>
  15. </template>
  16. <script>
  17. import commonWrapper from "./commonWrapper.vue";
  18. export default {
  19. components: { commonWrapper },
  20. props: {
  21. dataConfig: {
  22. type: Object,
  23. default: () => {},
  24. },
  25. isSortType: {
  26. type: String | Number,
  27. default: 0,
  28. },
  29. },
  30. data() {
  31. return {
  32. height: 0,
  33. };
  34. },
  35. computed: {
  36. configData() {
  37. return {
  38. ...this.dataConfig,
  39. paddingConfig: this.dataConfig.paddingConfig || {
  40. isAll: false,
  41. valList: [
  42. {
  43. val: this.dataConfig.topConfig
  44. ? this.dataConfig.topConfig.val
  45. : 0,
  46. },
  47. {
  48. val: this.dataConfig.prConfig ? this.dataConfig.prConfig.val : 0,
  49. },
  50. {
  51. val: this.dataConfig.bottomConfig
  52. ? this.dataConfig.bottomConfig.val
  53. : 0,
  54. },
  55. {
  56. val: this.dataConfig.prConfig ? this.dataConfig.prConfig.val : 0,
  57. },
  58. ],
  59. },
  60. marginConfig: this.dataConfig.marginConfig || {
  61. isAll: false,
  62. valList: [
  63. {
  64. val: this.dataConfig.mbConfig ? this.dataConfig.mbConfig.val : 0,
  65. },
  66. {
  67. val: 0,
  68. },
  69. {
  70. val: 0,
  71. },
  72. {
  73. val: 0,
  74. },
  75. ],
  76. },
  77. };
  78. },
  79. // 视频高度
  80. videoStyle() {
  81. let borderRadius = `${this.dataConfig.fillet.val * 2}rpx`;
  82. if (this.dataConfig.fillet.type) {
  83. borderRadius = `${this.dataConfig.fillet.valList[0].val * 2}rpx ${
  84. this.dataConfig.fillet.valList[1].val * 2
  85. }rpx ${this.dataConfig.fillet.valList[3].val * 2}rpx ${
  86. this.dataConfig.fillet.valList[2].val * 2
  87. }rpx`;
  88. }
  89. return {
  90. height: this.height + "px",
  91. "border-radius": borderRadius,
  92. };
  93. },
  94. },
  95. mounted() {
  96. const query = uni.createSelectorQuery().in(this);
  97. query
  98. .select("#myVideo")
  99. .boundingClientRect((data) => {
  100. switch (this.dataConfig.scaleConfig.tabVal) {
  101. case 0:
  102. this.height = (data.width * 9) / 16;
  103. break;
  104. case 1:
  105. this.height = (data.width * 3) / 4;
  106. break;
  107. default:
  108. this.height = data.width;
  109. break;
  110. }
  111. })
  112. .exec();
  113. },
  114. };
  115. </script>
  116. <style lang="scss" scoped>
  117. .video-box {
  118. overflow: hidden;
  119. }
  120. .video {
  121. width: 100%;
  122. height: 100%;
  123. }
  124. </style>