JS实现上传图片实时预览功能


Posted in Javascript onMay 22, 2017

前段时间在网络上找的代码,修改了一部分用在了项目里。原博客地址找不到了,如果原作者看到的话留言我,将于第一时间删除。

//js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
  function PreviewImage(fileObj) {
    //创建dom元素
    var divPreviewId = 'divPreview_' + fileObj.name;
    var imgPreviewId = 'imgHeadPhoto_' + fileObj.name;
    var html='<div id="'+divPreviewId+'">'+
          '<img id="'+imgPreviewId+'" src="images/moren.jpg" style="width: 120px; height: 120px; border: solid 1px #d2e2e2;" />'+
         '</div>';
    $('#'+divPreviewId).remove();
    $(fileObj).after(html);
    //进行限制
    var allowExtention = ".jpg,.bmp,.gif,.png"; //允许上传文件的后缀名document.getElementById("hfAllowPicSuffix").value;
    var extention = fileObj.value.substring(fileObj.value.lastIndexOf(".") + 1).toLowerCase();
    var browserVersion = window.navigator.userAgent.toUpperCase();
    if (allowExtention.indexOf(extention) > -1) {  //格式正确
      if (fileObj.files) {  //HTML5实现预览,兼容chrome、火狐7+等
        if (window.FileReader) {
          var reader = new FileReader();
          reader.onload = function (e) {
            document.getElementById(imgPreviewId).setAttribute("src", e.target.result);
          }
          reader.readAsDataURL(fileObj.files[0]);
        } else if (browserVersion.indexOf("SAFARI") > -1) {
          $('#'+divPreviewId).remove();
          alert("不支持Safari6.0以下浏览器的图片预览!");
        }
      } else if (browserVersion.indexOf("MSIE") > -1) {
        if (browserVersion.indexOf("MSIE 6") > -1) {//ie6
          document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
        } else {//ie[7-9]
          fileObj.select();
          if (browserVersion.indexOf("MSIE 9") > -1)
            fileObj.blur(); //不加上document.selection.createRange().text在ie9会拒绝访问
          var newPreview = document.getElementById(divPreviewId + "New");
          if (newPreview == null) {
            newPreview = document.createElement("div");
            newPreview.setAttribute("id", divPreviewId + "New");
            newPreview.style.width = document.getElementById(imgPreviewId).width + "px";
            newPreview.style.height = document.getElementById(imgPreviewId).height + "px";
            newPreview.style.border = "solid 1px #d2e2e2";
          }
          newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";
          var tempDivPreview = document.getElementById(divPreviewId);
          tempDivPreview.parentNode.insertBefore(newPreview, tempDivPreview);
          tempDivPreview.style.display = "none";
        }
      } else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox
        var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]);
        if (firefoxVersion < 7) {//firefox7以下版本
          document.getElementById(imgPreviewId).setAttribute("src", fileObj.files[0].getAsDataURL());
        } else {//firefox7.0+          
          document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(fileObj.files[0]));
        }
      } else {
        document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
      }
    } else {
      $('#'+divPreviewId).remove();
      alert("仅支持" + allowExtention + "为后缀名的文件!");
      fileObj.value = ""; //清空选中文件
      if (browserVersion.indexOf("MSIE") > -1) {
        fileObj.select();
        document.selection.clear();
      }
      fileObj.outerHTML = fileObj.outerHTML;
    }
    return fileObj.value;  //返回路径
  }

以上所述是小编给大家介绍的JS实现上传图片实时预览功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript radio 联动效果
Mar 04 Javascript
JavaScript 数组循环引起的思考
Jan 01 Javascript
网页图片延时加载的js代码
Apr 22 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
js实现幻灯片效果(基于jquery插件)
Nov 05 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
Mar 12 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
javascript 数组去重复(在线去重工具)
Dec 17 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
Mar 06 Javascript
实例介绍JavaScript中多种组合继承
Jan 20 Javascript
详解Angular 4.x NgIf 的用法
May 22 #Javascript
JS实现无缝循环marquee滚动效果
May 22 #Javascript
jQuery表单验证之密码确认
May 22 #jQuery
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 #Javascript
单行 JS 实现移动端金钱格式的输入规则
May 22 #Javascript
JavaScript表单验证实现代码
May 22 #Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 #jQuery
You might like
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php注销代码(session注销)
2012/05/31 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
range 标准化之获取
2011/08/28 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
javascript self对象使用详解
2016/10/18 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
大学生思想汇报范文
2013/12/31 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
机关作风建设整改方案
2014/10/27 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
2016新年问候语大全
2015/11/11 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
零基础学java之循环语句的使用
2022/04/10 Java/Android