如何实现点击头像弹出选择图片窗口?

发布于 2022-09-30 23:10:24 字数 24 浏览 30 评论 0

如何实现点击头像弹出选择图片窗口?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

分开我的手 2022-10-07 23:10:24

文件上传,找一下相关的UI库。
image.png
这个把文案去掉就能达到你要的效果吧。

桃气十足 2022-10-07 23:10:24

input定位在img上面,input完全透明

零度° 2022-10-07 23:10:24

测试使用:https://codepen.io/pantao/pen...

假设 HTML 结构如下:

<div class="avatar">
  <img src="https://avatars.githubusercontent.com/u/463704?v=4" alt="Avatar" id="avatar-image" />
</div>

CSS 样式:

.avatar {
  width: 80px;
  height: 80px;
  border-radius: 3px;
  overflow: hidden;
}

.avatar img {
  width: 100%;
  height: 100%;
  cursor: pointer;
}

那么,可以通过下面这段代码实现上面的需求:

const pickImage = () => {
  // 我这里是返回了一个 Promise,也可以不使用 Promise,回调也可以
  return new Promise((resolve, reject) => {
    // 创建一个 input 元素
    const input = document.createElement('input');
    // 类型为 file,这样,当它点击的时候,就会打开文件选择框
    input.setAttribute('type', 'file');
    // 只接受图片文件,除了该限制,还可以加上数量限制等
    input.setAttribute('accept', 'image/*');
    // 监听 input 的 change 事件,将其 target.files 返回
    input.addEventListener('change', e => {
      console.log(e);
      resolve(e.target.files);
    });
    // 创建一个 MouseEvents
    const event = document.createEvent('MouseEvents');
    // 初始化事件为 `click` 事件
    event.initMouseEvent("click")
    // 在 input 上面触发该事件
    input.dispatchEvent(event);
  })
}

// 给 #avatar-image 添加 click 事件监听,点击之后,调用 pickImage() 方法取得文件
document.getElementById('avatar-image').addEventListener('click', async () => {
  const result = await pickImage();
  console.log(result[0].name);
})

如果是 Vue 项目的话,只需要将 pickImage 方法写进 methods 中,然后通过 <img @click="pickImage" /> 即可调用,并且还不需要返回 Promise,直接在 pickImage 里面延揽 e.target.files 即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文