m-image.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <view class="flex_r m-image" :style="{ height: getImageHeight(value.payload) + 'rpx' }">
  3. <!-- <image class="img" :src="value.payload.thumbnail || value.payload.url" mode="widthFix"></image> -->
  4. <image class="img" :src="value.payload.url" mode="heightFix" @load="imgLoad"></image>
  5. <!-- {{value.payload.thumbnail}} -->
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. props: {
  11. isMy: {
  12. type: [Boolean, Number],
  13. default: false
  14. },
  15. value: {
  16. type: Object,
  17. default: {}
  18. }
  19. },
  20. data() {
  21. return {};
  22. },
  23. computed: {},
  24. methods: {
  25. /**
  26. * 核心就是设置高度,产生明确占位
  27. *
  28. * 小 (宽度和高度都小于预设尺寸)
  29. * 设高=原始高度
  30. * 宽 (宽度>高度)
  31. * 高度= 根据宽度等比缩放
  32. * 窄 (宽度<高度)或方(宽度=高度)
  33. * 设高=MAX height
  34. *
  35. * @param width,height
  36. * @returns number
  37. */
  38. getImageHeight(payload) {
  39. const { width, height } = payload;
  40. const IMAGE_MAX_WIDTH = 130;
  41. const IMAGE_MAX_HEIGHT = 94;
  42. if (width < IMAGE_MAX_WIDTH && height < IMAGE_MAX_HEIGHT) {
  43. return height * 3;
  44. } else if (width > height) {
  45. return (IMAGE_MAX_WIDTH / width) * height * 3;
  46. } else if (width === height || width < height) {
  47. return IMAGE_MAX_HEIGHT * 3;
  48. }
  49. },
  50. imgLoad(e){
  51. this.$emit('imgLoad',e)
  52. }
  53. }
  54. };
  55. </script>
  56. <style scoped lang="scss">
  57. .m-image {
  58. border-radius: 10rpx;
  59. overflow: hidden;
  60. .img {
  61. min-height: 100rpx;
  62. background-color: #fff;
  63. }
  64. }
  65. </style>