¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="u-avatar-group"> |
| | | <view |
| | | class="u-avatar-group__item" |
| | | v-for="(item, index) in showUrl" |
| | | :key="index" |
| | | :style="{ |
| | | marginLeft: index === 0 ? 0 : $u.addUnit(-size * gap) |
| | | }" |
| | | > |
| | | <u-avatar |
| | | :size="size" |
| | | :shape="shape" |
| | | :mode="mode" |
| | | :src="$u.test.object(item) ? keyName && item[keyName] || item.url : item" |
| | | ></u-avatar> |
| | | <view |
| | | class="u-avatar-group__item__show-more" |
| | | v-if="showMore && index === showUrl.length - 1 && (urls.length > maxCount || extraValue > 0)" |
| | | @tap="clickHandler" |
| | | > |
| | | <u--text |
| | | color="#ffffff" |
| | | :size="size * 0.4" |
| | | :text="`+${extraValue || urls.length - showUrl.length}`" |
| | | align="center" |
| | | customStyle="justify-content: center" |
| | | ></u--text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | /** |
| | | * AvatarGroup 头åç» |
| | | * @description æ¬ç»ä»¶ä¸è¬ç¨äºå±ç¤ºå¤´åçå°æ¹ï¼å¦ä¸ªäººä¸å¿ï¼æè
è¯è®ºå表页çç¨æ·å¤´åå±ç¤ºçåºæã |
| | | * @tutorial https://www.uviewui.com/components/avatar.html |
| | | * |
| | | * @property {Array} urls 头åå¾çç» ï¼é»è®¤ [] ï¼ |
| | | * @property {String | Number} maxCount æå¤å±ç¤ºç头忰é ï¼ é»è®¤ 5 ï¼ |
| | | * @property {String} shape 头åå½¢ç¶ï¼ 'circle' (é»è®¤) | 'square' ï¼ |
| | | * @property {String} mode å¾çè£åªæ¨¡å¼ï¼é»è®¤ 'scaleToFill' ï¼ |
| | | * @property {Boolean} showMore è¶
åºmaxCountæ¶æ¯å¦æ¾ç¤ºæ¥çæ´å¤çæç¤º ï¼é»è®¤ true ï¼ |
| | | * @property {String | Number} size 头åå¤§å° ï¼é»è®¤ 40 ï¼ |
| | | * @property {String} keyName æå®ä»æ°ç»ç对象å
ç´ ä¸è¯»ååªä¸ªå±æ§ä½ä¸ºå¾çå°å |
| | | * @property {String | Number} gap 头åä¹é´ç鮿¡æ¯ä¾ï¼0.4ä»£è¡¨é®æ¡40%ï¼ ï¼é»è®¤ 0.5 ï¼ |
| | | * @property {String | Number} extraValue éé¢å¤æ¾ç¤ºçå¼ |
| | | * @event {Function} showMore 头åç»æ´å¤ç¹å» |
| | | * @example <u-avatar-group:urls="urls" size="35" gap="0.4" ></u-avatar-group:urls=> |
| | | */ |
| | | export default { |
| | | name: 'u-avatar-group', |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin, props], |
| | | data() { |
| | | return { |
| | | |
| | | } |
| | | }, |
| | | computed: { |
| | | showUrl() { |
| | | return this.urls.slice(0, this.maxCount) |
| | | } |
| | | }, |
| | | methods: { |
| | | clickHandler() { |
| | | this.$emit('showMore') |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../libs/css/components.scss"; |
| | | |
| | | .u-avatar-group { |
| | | @include flex; |
| | | |
| | | &__item { |
| | | margin-left: -10px; |
| | | position: relative; |
| | | |
| | | &--no-indent { |
| | | // å¦æä½ æ³è´¨çä½è
ä¸ä¼ä½¿ç¨:first-childï¼è¯´æä½ 太年轻ï¼å 为nvue䏿¯æ |
| | | margin-left: 0; |
| | | } |
| | | |
| | | &__show-more { |
| | | position: absolute; |
| | | top: 0; |
| | | bottom: 0; |
| | | left: 0; |
| | | right: 0; |
| | | background-color: rgba(0, 0, 0, 0.3); |
| | | @include flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border-radius: 100px; |
| | | } |
| | | } |
| | | } |
| | | </style> |