h-legend.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <view class="h-legend-container">
  3. <view v-for="(item, index) in legendData" :key="index" class="legend-item"
  4. :style="{ marginRight: index === legendData.length - 1 ? '0' : itemSpacing + 'rpx' }">
  5. <view class="legend-color" :style="{ backgroundColor: item.color }"></view>
  6. <text class="legend-text" :style="{ fontSize: textSize + 'rpx', color: textColor }">
  7. {{ item.name }}
  8. </text>
  9. </view>
  10. </view>
  11. </template>
  12. <script>
  13. export default {
  14. name: 'HLegend',
  15. props: {
  16. // 图例数据数组
  17. legendData: {
  18. type: Array,
  19. default: () => []
  20. },
  21. // 图例颜色块大小
  22. colorSize: {
  23. type: Number,
  24. default: 24
  25. },
  26. // 文字大小
  27. textSize: {
  28. type: Number,
  29. default: 24
  30. },
  31. // 文字颜色
  32. textColor: {
  33. type: String,
  34. default: '#333333'
  35. },
  36. // 图例间距
  37. itemSpacing: {
  38. type: Number,
  39. default: 32
  40. }
  41. }
  42. }
  43. </script>
  44. <style lang="scss" scoped>
  45. .h-legend-container {
  46. display: flex;
  47. flex-wrap: nowrap;
  48. align-items: center;
  49. overflow-x: auto;
  50. padding: 16rpx 0;
  51. }
  52. .legend-item {
  53. display: flex;
  54. align-items: center;
  55. flex-shrink: 0;
  56. }
  57. .legend-color {
  58. border-radius: 4rpx;
  59. margin-right: 12rpx;
  60. margin-top: 2rpx;
  61. flex-shrink: 0;
  62. width: 45rpx;
  63. height: 22rpx;
  64. }
  65. .legend-text {
  66. font-weight: 400;
  67. white-space: nowrap;
  68. }
  69. </style>