m-video.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <view class="flex_r m-video">
  3. <!-- heightFix -->
  4. <image class="z_index2" :style="getImageHeight" :src="value.payload.thumbnail.url" mode="aspectFill"></image>
  5. <view class="m-video-icon">
  6. <image
  7. class="img"
  8. src="data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBkYXRhLXNwbS1hbmNob3ItaWQ9ImEzMTN4LnNlYXJjaF9pbmRleC4wLmk1LjU1YjUzYTgxcDB1a0U0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTUxNi42NTUgOS4zMUMyMzcuMzgyIDkuMzEgMTAuODYgMjM1LjgzIDEwLjg2IDUxNS4xMDJzMjI2LjUyIDUwNS43OTQgNTA1Ljc5NCA1MDUuNzk0IDUwNS43OTMtMjI2LjUyMSA1MDUuNzkzLTUwNS43OTRjMC0yNzcuNzIxLTIyNi41Mi01MDUuNzk0LTUwNS43OTMtNTA1Ljc5NHptMCA5ODIuMTA4Yy0yNjIuMjA3IDAtNDc0Ljc2NC0yMTIuNTU3LTQ3NC43NjQtNDc0Ljc2MyAwLTI2Mi4yMDcgMjEyLjU1Ny00NzQuNzY0IDQ3NC43NjQtNDc0Ljc2NCAyNjIuMjA2IDAgNDc0Ljc2MyAyMTIuNTU3IDQ3NC43NjMgNDc0Ljc2NCAwIDI2Mi4yMDYtMjEyLjU1NyA0NzQuNzYzLTQ3NC43NjMgNDc0Ljc2M3oiIGRhdGEtc3BtLWFuY2hvci1pZD0iYTMxM3guc2VhcmNoX2luZGV4LjAuaTcuNTViNTNhODFwMHVrRTQiIGNsYXNzPSJzZWxlY3RlZCIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik03MDUuOTQgNDc0Ljc2NEw0NzAuMTEgMzI1LjgxOGMtMjEuNzIyLTEzLjk2My01MS4yLTcuNzU3LTYzLjYxMyAxMy45NjQtNC42NTUgNy43NTctNy43NTggMTUuNTE1LTcuNzU4IDI0LjgyNHYyOTcuODkxYzAgMjYuMzc2IDIwLjE3IDQ2LjU0NSA0Ni41NDYgNDYuNTQ1IDkuMzA5IDAgMTcuMDY3LTMuMTAzIDI0LjgyNC03Ljc1N2wyMzcuMzgyLTE0OC45NDZjMjEuNzIxLTEzLjk2MyAyNy45MjctNDEuODkgMTMuOTY0LTYzLjYxMi00LjY1NS00LjY1NC05LjMxLTkuMzA5LTE1LjUxNi0xMy45NjN6IiBkYXRhLXNwbS1hbmNob3ItaWQ9ImEzMTN4LnNlYXJjaF9pbmRleC4wLmk2LjU1YjUzYTgxcDB1a0U0IiBjbGFzcz0ic2VsZWN0ZWQiIGZpbGw9IiNmZmYiLz48L3N2Zz4="
  9. mode="aspectFill"
  10. ></image>
  11. </view>
  12. <view class="size_white text_22 m-video-time">{{ getTimes }}</view>
  13. </view>
  14. </template>
  15. <script>
  16. export default {
  17. props: {
  18. isMy: {
  19. type: [Boolean, Number],
  20. default: false
  21. },
  22. value: {
  23. type: Object,
  24. default: {}
  25. }
  26. },
  27. data() {
  28. return {};
  29. },
  30. computed: {
  31. getImageHeight() {
  32. let { width, height } = this.value.payload.thumbnail;
  33. if (width < 300) {
  34. width = width * 1.1;
  35. height = height * 1.1;
  36. if (width < 200) {
  37. width = width * 1.2;
  38. height = height * 1.2;
  39. if (width < 150) {
  40. width = width * 1.3;
  41. height = height * 1.3;
  42. }
  43. }
  44. }
  45. if (width >= 360) {
  46. width = width * 0.9;
  47. height = height * 0.9;
  48. }
  49. return {
  50. width: `${width}rpx`,
  51. height: `${height}rpx`
  52. };
  53. },
  54. getTimes() {
  55. const t = this.value.payload.video.duration;
  56. let h = parseInt((t / 60 / 60) % 24);
  57. let m = parseInt((t / 60) % 60);
  58. let s = parseInt(t % 60);
  59. h = h < 10 ? '0' + h : h;
  60. m = m < 10 ? '0' + m : m;
  61. s = s < 10 ? '0' + s : s;
  62. if (h === '00') return `${m}:${s}`;
  63. return `${h}:${m}:${s}`;
  64. }
  65. },
  66. methods: {}
  67. };
  68. </script>
  69. <style scoped lang="scss">
  70. .m-video {
  71. position: relative;
  72. border-radius: 10rpx;
  73. overflow: hidden;
  74. background-color: #fff;
  75. .m-video-icon {
  76. position: absolute;
  77. z-index: 3;
  78. width: 90rpx;
  79. height: 90rpx;
  80. top: calc(50% - 45rpx);
  81. left: calc(50% - 45rpx);
  82. border-radius: 50%;
  83. background-color: rgba(000, 000, 000, 0.2);
  84. }
  85. .m-video-time {
  86. position: absolute;
  87. z-index: 3;
  88. bottom: 10rpx;
  89. right: 10rpx;
  90. }
  91. }
  92. </style>