JS实现图片上传之前进行预览

在Web端开发图片上传功能时,往往需要在上传图片之前对图片进行预览,既可以防止上传错误的图片,又可以大大提升用户体验,但是在IE浏览器上为了提升安全性是不支持上传前预览的,所以需要使用滤镜来实现:

<!-- html代码,不考虑CSS样式 -->
<img id="preview"  alt="" />
<form class="am-form" method="post" enctype="multipart/form-data">
    <input type="file" id="head" name="head" onchange="previewImage(this)">
    <button type="submit" class="am-btn am-btn-primary am-btn-xs">保存</button>
</form>

下面是js的实现:

// 上传图片前预览
function previewImage(file) {
    var MAXWIDTH = 120;  // 最大图片宽度
    var MAXHEIGHT = 120;  // 最大图片高度
    if (file.files && file.files[0]) {
        var img = document.getElementById('preview');
        img.onload = function () {
            var rect = getZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
            img.width = rect.width;
            img.height = rect.height;
        }
        var reader = new FileReader();
        reader.onload = function (evt) { 
            img.src = evt.target.result; 
        }
        reader.readAsDataURL(file.files[0]);
      } else {
          //兼容IE
          file.select();
          var src = document.selection.createRange().text;
          var img = document.getElementById('preview');
          img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src;
      }
}

// 获取缩放的尺寸
function getZoomParam(maxWidth, maxHeight, width, height) {
    var param = { top: 0, left: 0, width: width, height: height };
    if (width > maxWidth || height > maxHeight) {
        rateWidth = width / maxWidth;
        rateHeight = height / maxHeight;
        if (rateWidth > rateHeight) {
            param.width = maxWidth;
            param.height = Math.round(height / rateWidth);
        } else {
            param.width = Math.round(width / rateHeight);
            param.height = maxHeight;
        }
    }
    param.left = Math.round((maxWidth - param.width) / 2);
    param.top = Math.round((maxHeight - param.height) / 2);
    return param;
}

经过测试,在chrome和firefox以及edge浏览器上是好用的,IE浏览器未进行测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容