前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10行JavaScript代码完成图片的上传预览

10行JavaScript代码完成图片的上传预览

作者头像
Javanx
发布2019-09-04 16:43:43
1.6K0
发布2019-09-04 16:43:43
举报
文章被收录于专栏:web秀web秀

前言

冬至,希望大家都可以有饺子和汤圆吃,主要是能和自己家人爱人一起吃个饭。 下面进入主题,用原生JS给撸个图片上传,预览的小示例,希望对大家有所帮助。

示例

代码语言:javascript
复制
function fChange() {
  let file = document.getElementById('file');
  // 输出已经选择图片名字
  console.log(file.value);
  // 输出已经选择的图片对象
  console.log(file.files[0]);
}
...
<input type="file" id="file" onchange="fChange()">
10行JavaScript代码完成图片的上传预览
10行JavaScript代码完成图片的上传预览

我们怎么把图片对象渲染到页面了?达到可以预览的目的?

代码语言:javascript
复制
// file 转 blob对象
let bold = window.URL.createObjectURL(file.files[0]);
console.log('bold==>'+bold);

let boldImg = document.getElementById('bold');
boldImg.src = bold;

// file 转 base64
let base64Img = document.getElementById('base64');
var reader = new FileReader();
reader.readAsDataURL(file.files[0]);
reader.onload = function (e) {
  console.log('base64==>'+this.result);
  base64Img.src = this.result;
}
10行JavaScript代码完成图片的上传预览
10行JavaScript代码完成图片的上传预览
10行JavaScript代码完成图片的上传预览
10行JavaScript代码完成图片的上传预览

这样看blob对象和base64都可以预览图片,但是blob对象仅仅是当次缓存,如果刷新,你重新把之前转的字符串放到src是不可以预览的,当时base64是可以的。所以存库的时候不仅可以图片路径,还可以直接存base64(base64很占用数据库空间,文件越大,base64字符串越大)

优化

下面我们对上面示例做优化,可以上传多张图片并预览,美化界面。

10行JavaScript代码完成图片的上传预览
10行JavaScript代码完成图片的上传预览
代码语言:javascript
复制
<div id="img-pre">
</div>
<div id="add-pic">
    <input type="file" id="up-file" onchange="fChange()">
</div>

css样式

代码语言:javascript
复制
#add-pic{
  width: 100px;
  height: 100px;
  background: url('./add-pic.png')
}
#add-pic input{
  width: 100%;
  height: 100%;
  display: none;
}
#img-pre:after{
  display: block;
  content: '';
  clear: both;
}
#img-pre img{
  float: left;
  width: 100px;
  height: 100px;
  margin-right: 10px;
}

javascript

代码语言:javascript
复制
let addPic = document.getElementById('add-pic'), upFile = document.getElementById('up-file');
// 监听图片点击,从而触发input file的点击事件
addPic.addEventListener('click', function(){
  upFile.click();
})
function fChange() {
    let file = document.getElementById('up-file');
    let imgPre = document.getElementById('img-pre');

    // file 转 blob对象
    let bold = window.URL.createObjectURL(file.files[0]);

    // 创建img元素,并添加到img-pre元素里
    var img = document.createElement("img");
    img.setAttribute("src", bold);
    imgPre.appendChild(img);
}

主要是通过css隐藏掉input file选择文件按钮,然后用+号图片点击事件来触发input file的点击事件,达到能选择图片的目的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 示例
  • 优化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档