预览input上传的图片

通过input来上传图片并将图片显示出来
注意:终极解决方案在最后面

<input id="imgPicker" type="file" />
<img id="preview" />

方法一

监听input标签的change事件,用来观察用户是否选中了图片

document
    .querySelector('#imgPicker')
    .addEventListener('change', function(){
        //当没选中图片时,清除预览
        if(this.files.length === 0){
            document.querySelector('#preview').src = '';
            return;
        }

        //实例化一个FileReader
        var reader = new FileReader();

        reader.onload = function (e) {
            //当reader加载时,把图片的内容赋值给
            document.querySelector('#preview').src = e.target.result;
        };

    //读取选中的图片,并转换成dataURL格式
    reader.readAsDataURL(this.files[0]);
    }, false);

优化

使用HTML5的FileReader来读取图片,将读取结果直接替换到img的src属性上即可。

要先设置回调再读取文件。

input.onchange = function () {
    var imgFile = input.files[0];
    var fr = new FileReader();

    fr.onload = function () {
        img.src = fr.result;
    };
    // 注意要先设置回调再读取文件
    fr.readAsDaraURL(imgFile);
};

类似的方法

<body>
    <input type="file" id="file" name="" />
    <div id="image" style="width:390px;height:280px; background:#CCCCCC; float:left;">
        <img src="__PUBLIC__/images/tu.png" />
    </div>
</body>
<script>
document.getElementById('file').onchange = function() {
    var imgFile = this.files[0];
    var fr = new FileReader();
    fr.onload = function() {
        document.getElementById('image').getElementsByTagName('img')[0].src = fr.result;
    };
    fr.readAsDataURL(imgFile);
};
</script>

</html>

最简单好用的终极方案

window.URL.createObjectURL 这个函数会创建一个临时的地址,把地址设置到src上就行了。

//这里传一个文件对象 例如:file.files[0]
var src=window.URL.createObjectURL(blob);
img.src=src;

例子

//通过onchange事件监听,通过this去获取上传的文件对象
<input id="imgPicker" type="file" onchange="showImage(this)"/>
<img id="preview" wdith="100px" height="100px"/>

function showImage(file){
  var src = window.URL.createObjectURL(file.files[0]);
  $("#preview").attr('src',src);
}

这样就可以了,是不是特别简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值