element源码解析(5) -- Avatar

Avatar头像,functional
在这里插入图片描述

props

总共8个属性,分别是

  1. 尺寸size
  2. 形状shape
  3. 图标icon
  4. 自定义图片src
  5. 未加载提示alt
  6. 尺寸设置图片 srcSet
  7. 错误回调函数error
  8. 图片object-fit样式属性值

size

可以为字符串或者数字,如果是字符串的话,那么只可以为大中小

size: {
      type: [Number, String],
      validator(val) {
        if (typeof val === 'string') {
          return ['large', 'medium', 'small'].includes(val);
        }
        return typeof val === 'number';
      }
    },

shape

形状只可能为圆或者方

shape: {
      type: String,
      default: 'circle',
      validator(val) {
        return ['circle', 'square'].includes(val);
      }
    },

其它

    icon: String,
    src: String,
    alt: String,
    srcSet: String,
    error: Function,
    fit: {
      type: String,
      default: 'cover'
    }

data

定义图片是否存在,与src和icon判断返回插槽

data() {
    return {
      isImageExist: true
    };
  },

computed

只有一个属性,就是avatarClass,根据三个条件来判断 给avatarClass返回对应样式

avatarClass() {
      const { size, icon, shape } = this;
      let classList = ['el-avatar'];

      if (size && typeof size === 'string') {
        classList.push(`el-avatar--${size}`);
      }

      if (icon) {
        classList.push('el-avatar--icon');
      }

      if (shape) {
        classList.push(`el-avatar--${shape}`);
      }

      return classList.join(' ');
    }

methods

handleError

有无错误判断函数,如果有,执行错误函数
判断错误是否存在设置图片是否存在属性
这个函数在img监听error的时候执行

handleError() {
      const { error } = this;
      const errorFlag = error ? error() : undefined;
      if (errorFlag !== false) {
        this.isImageExist = false;
      }
    },

renderAvatar

根据图片是存在和自定义图片是否存在判断用图片还是图标,都没有就返回插槽

renderAvatar() {
      const { icon, src, alt, isImageExist, srcSet, fit } = this;

      if (isImageExist && src) {
        return <img
          src={src}
          onError={this.handleError}
          alt={alt}
          srcSet={srcSet}
          style={{ 'object-fit': fit }}/>;
      }

      if (icon) {
        return (<i class={icon} />);
      }

      return this.$slots.default;
    }
  },

render

渲染函数
提取class和尺寸,借助renderAvatar()渲染

render() {
    const { avatarClass, size } = this;

    const sizeStyle = typeof size === 'number' ? {
      height: `${size}px`,
      width: `${size}px`,
      lineHeight: `${size}px`
    } : {};

    return (
      <span class={ avatarClass } style={ sizeStyle }>
        {
          this.renderAvatar()
        }
      </span>
    );
  }

scss

使用了模块函数mixin b和m,b是命名空间前缀el-avatar,m是分割符前缀el-avatar–circle等

@import "mixins/mixins";
@import "common/var";

@include b(avatar) {
  display: inline-block;
  box-sizing: border-box;
  text-align: center;
  overflow: hidden;
  color: $--avatar-font-color;
  background: $--avatar-background-color;
  width: $--avatar-large-size;
  height: $--avatar-large-size;
  line-height: $--avatar-large-size;
  font-size: $--avatar-text-font-size;

  >img {
    display: block;
    height: 100%;
    vertical-align: middle;
  }

  @include m(circle) {
    border-radius: 50%;
  }

  @include m(square) {
    border-radius: $--avatar-border-radius;
  }

  @include m(icon) {
    font-size: $--avatar-icon-font-size;
  }

  @include m(large) {
    width: $--avatar-large-size;
    height: $--avatar-large-size;
    line-height: $--avatar-large-size;
  }

  @include m(medium) {
    width: $--avatar-medium-size;
    height: $--avatar-medium-size;
    line-height: $--avatar-medium-size;
  }

  @include m(small) {
    width: $--avatar-small-size;
    height: $--avatar-small-size;
    line-height: $--avatar-small-size;
  }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
u-avatar-cropper是一个头像裁剪组件,它是在Vue框架下使用的。可以通过安装vue-avatar-cropper插件来使用它,安装命令为npm i vue-avatar-cropper。在使用时,可以在代码中添加<button>标签来选择图片,然后使用<avatar-cropper>标签来展示头像裁剪功能。当图片上传完成后,可以通过监听@uploaded事件来处理上传后的结果。 此外,也可以使用u-View组件库中的AvatarCropper来实现头像裁剪功能。具体使用方法详细介绍在u-View官网上,可以访问 https://www.uviewui.com/components/avatarCropper.html 来查看详细的使用说明。 如果要在项目中使用u-avatar-cropper组件,还需要在page.json文件中引入u-avatar-cropper的路径,并在style字段中设置导航栏标题和背景颜色等样式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue-avatar-cropper:一个简单而优雅的头像裁剪和上传插件](https://download.csdn.net/download/weixin_42132359/15108564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [微信小程序AvatarCropper 头像裁剪](https://blog.csdn.net/qq_30136729/article/details/119932010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [#uni-app# u-avatar-cropper实现选择图片裁剪,设置用户头像uview (附源码)](https://blog.csdn.net/ZHENGCHUNJUN/article/details/120764543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值