vue 更改头像功能实现

——————–
如上图所示:需要完成的功能是点击更改头像,获取本地文件库,选择图片后将原始图片替换。这里我就直接用html文件引入vue来简单实现在这功能,代码如下:
HTML:

<div id="app">
  <div class="item_bock head_p">
     <div class="head_img">
       <img :src="userInfo.avatar"/>
       <--图片地址动态绑定-->
     </div>
     <div class="setting_right" @click.stop="uploadHeadImg">
       <div class="caption">更改头像</div>
     </div>
     <input type="file" accept="image/*" @change="handleFile" class="hiddenInput"/>
   </div>
 </div>

注意:
1.accept 属性用于限制图像的格式 如:(accept=”image/gif, image/jpeg”),accept=”image/*”表示不限制格式。
2.真正打开本地文件的是input,但这里是将其隐藏的。

JS:

var app = new Vue({
  el: '#app',
  data: {
    userInfo: {
      avatar: 'https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=62d46c39067b020818c437b303b099b6/d4628535e5dde7119c3d076aabefce1b9c1661ba.jpg'
    }
    // 初始图片
  },
  methods: {
    // 打开图片上传
    uploadHeadImg: function () {
      this.$el.querySelector('.hiddenInput').click()
    },
    // 将头像显示
    handleFile: function (e) {
      let $target = e.target || e.srcElement
      let file = $target.files[0]
      var reader = new FileReader()
      reader.onload = (data) => {
        let res = data.target || data.srcElement
        this.userInfo.avatar = res.result
      }
      reader.readAsDataURL(file)
    },
  }
})

注意:
1.this.$el.querySelector('.hiddenInput') 是获取文档中 class=”hiddenInput” 的元素。
2.在打开文件夹选中图片确认后,执行handleFile函数
3.let $target = e.target || e.srcElement 表示调用他的各种属性,
两个的区别是:ie下支持e.srcElement,ff支持e.target。
4.由于手机上可以选择多张图片,所以let file = $target.files[0],表示取第一张图。
5.var reader = new FileReader() FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
6.onload 事件会在页面或图像加载完成后立即发生。
7.FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL。

css:

.item_bock {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height:94px;
  width: 300px;
  padding:0px 24px 0px 38px;
  border-bottom: 1px solid #f7f7f7;
  background: #fff;
}
.head_p {
  height:132px;
}
.head_img{
  height: 90px;
}
.head_img img{
  width:90px;
  height:90px;
  border-radius:50px
}
.setting_right{
  display: flex;
  height: 37px;
  justify-content: flex-end;
  align-items: center;
}
.hiddenInput{
  display: none;
}
.caption {
  color: #8F8F8F;
  font-size: 26px;
  height: 37px;
}

这里只是将图片显示出来,并没有保存起来,如果需要上传或者保存,需要后台接口配合。

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
抖音上传头像功能实现需要使用 Vue3 和一些相关的第三方库和插件。 首先在 Vue3 项目中安装并引入 `vue-cropperjs` 和 `element-plus` 库: ``` npm install vue-cropperjs element-plus --save ``` 然后在需要使用上传头像功能的组件中,引入 `vue-cropperjs` 和 `element-plus`: ```vue <template> <div> <el-upload class="upload-demo" ref="upload" :action="uploadUrl" :on-change="handleUploadChange" :before-upload="beforeUpload" :show-file-list="false" > <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> <script> import { ref } from 'vue'; import 'element-plus/packages/theme-chalk/src/base.scss'; import { ElUpload } from 'element-plus'; import VueCropper from 'vue-cropperjs'; export default { name: 'AvatarUploader', components: { ElUpload, VueCropper, }, setup() { const uploadUrl = ref('your-upload-url'); const imageUrl = ref(''); const handleUploadChange = (file) => { if (file.raw) { const reader = new FileReader(); reader.onload = (e) => { imageUrl.value = e.target.result; }; reader.readAsDataURL(file.raw); } }; const beforeUpload = (file) => { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG && !isPNG) { this.$message.error('上传头像图片只能是 JPG/PNG 格式!'); return false; } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); return false; } return true; }; return { uploadUrl, imageUrl, handleUploadChange, beforeUpload, }; }, }; </script> <style scoped> .upload-demo { width: 200px; height: 200px; } .avatar { width: 200px; height: 200px; border-radius: 50%; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 200px; height: 200px; line-height: 200px; text-align: center; border-radius: 50%; background-color: #fff; border: 1px dashed #d9d9d9; cursor: pointer; } </style> ``` 在这个组件中,我们使用了 `ElUpload` 组件和 `VueCropper` 组件。`ElUpload` 组件是 Element-Plus 库提供的上传组件,`VueCropper` 组件是 `vue-cropperjs` 库提供的图片裁剪组件。 在 `beforeUpload` 方法中,我们限制了上传的图片格式必须是 JPG 或 PNG 格式,大小不能超过 2MB。 在 `handleUploadChange` 方法中,我们使用 `FileReader` 对象读取上传的图片文件,并将图片的 URL 赋值给 `imageUrl` 变量,以便显示在页面上。 最后,我们在模板中使用 `ElUpload` 组件来实现上传头像功能。如果用户选择了一张图片,我们就会通过 `handleUploadChange` 方法在页面上显示这张图片。如果用户还没有选择图片,我们就会显示一个加号图标,让用户点击来上传图片。 当用户选择图片后,我们就可以使用 `VueCropper` 组件来对图片进行裁剪操作。具体的裁剪操作可以参考 `vue-cropperjs` 库的官方文档。 以上就是基于 Vue3 和 `vue-cropperjs` 和 `element-plus` 库实现的抖音上传头像功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值