javascript图片预览和上传(兼容IE)


Posted in Javascript onMarch 15, 2017

本文实例为大家分享了js图片预览和上传的具体代码,供大家参考,具体内容如下

var dailiApply = {

   change: function (evt) {
    evt.preventDefault();
    var pic = document.getElementById("preview"),
     file = document.getElementById("f");

    var ext=file.value.substring(file.value.lastIndexOf(".")+1).toLowerCase();
    // gif在IE浏览器暂时无法显示
    if(ext!='png'&&ext!='jpg'&&ext!='jpeg'){
     alert("图片的格式必须为png或者jpg或者jpeg格式!");
     return;
    }
    var isIE = navigator.userAgent.match(/MSIE/)!= null,
     isIE6 = navigator.userAgent.match(/MSIE 6.0/)!= null;

    if(isIE) {
     file.select();
     var reallocalpath = document.selection.createRange().text;

     // IE6浏览器设置img的src为本地路径可以直接显示图片
     if (isIE6) {
      pic.src = reallocalpath;
     }else {
      // 非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现
      pic.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image',src=\"" + reallocalpath + "\")";
      // 设置img的src为base64编码的透明图片 取消显示浏览器默认图片
      pic.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
     }
    }else {
     var file_arr = file.files;
     var ul = $(".weui_uploader_files");
     if(file_arr.length < 7) {
      for(var key in file_arr) {
       if(file_arr.hasOwnProperty(key)) {
        var f = file_arr[key];
        var url = URL.createObjectURL(f);
        var reader = new FileReader();
        console.log(f);
        reader.readAsDataURL(f);
        n +=1;
        if(n < 7) {
         reader._onload = function(e) {

          // 拼接显示预览图片的html
          var list = $("<li class='weui_uploader_file' style='position: relative'>" +
           "<img id='preview" + n + "' class=preview_li' style='width: 100%;height: 100%'>" +
           "<span id='delImg" + n+ "' style='position: absolute; top: 0; right: 4px; color: #e4007f'>X</span></li>");
          ul.append(list);
          // 将转化后的图片地址放在img中
          var pic = document.getElementById('preview' + n);
          //pic.src = this.result;
          pic.src=url;
          dailiApply.compress(f, .7,undefined);
          //images.push(f);
          document.getElementById('delImg' + n).addEventListener("click", function () {
           $(this).parent().remove();
           --n;
          });

         };
         reader._onload();
        }else {
         $.alert("最多上传6张图片");
         n = 6;
        }
       }
      }
     }else {
      $.alert("最多上传6张图片");
     }
    }
    return false;
   },
   /**
    * @param {Object} f input选择的图片 必填
    * @param {String} quality  图片压缩的质量[0, 1]
    * @param {String} output_img_type  输出图片的类型
    */
   compress: function (f, quality, output_img_type) {
    var mime_type = "image/jpeg";
    if(output_img_type!=undefined && output_img_type=="image/png"){
     mime_type = "image/png";
    }
    createImageBitmap(f).then(function(imageBitmap) {
     var max = 1000; // 设置最大分辨率
     var c_w = '';
     var c_h = '';
     var width = imageBitmap.width;
     var height = imageBitmap.height;
     // 等比例缩放
     if (width > max || height > max) {
      if (width > height) {
       c_w = max;
       c_h = max * height / width;
      } else {
       c_h = max;
       c_w = max * width / height;
      }
     }else {  // 不缩放
      c_w = width;
      c_h = height;
     }

     var canvas = document.createElement('canvas');
     canvas.width = c_w;
     canvas.height = c_h;
     var ctx = canvas.getContext('2d');
     ctx.drawImage(imageBitmap,0,0, width, height, 0, 0, c_w, c_h);
     canvas.toBlob(function(blob){
      images.push(blob);
     },mime_type, quality);
    });
   },
   submit: function () {
    var content = $(".weui_textarea").val().trim();
    var xhr = new XMLHttpRequest();
    var fd = new FormData(document.getElementById('uploadForm'));
    $.each(images,function(i,e){
     fd.append("images", e);
    });
    fd.append("remark", content);
    fd.append("substationproxyId", 8);
    console.log(images);
    console.log(fd);
    if(content) {
     $.ajax({
      url: CONFIG.API.addSubProxyRecruit,
      type: "POST",
      data: fd,

      processData: false, // tell jQuery not to process the data
      contentType: false, // tell jQuery not to set contentType
      beforeSend: function (xhr) {
       $.showLoading();
       $(this).prop("disabled", true)
      },
      success: function (json) {
       console.log(json);
       $.hideLoading();
       $(this).prop("disabled", false);
       if(json.errorCode == 0) {
        $.alert("保存成功", function () {
         location.reload();
        })
       }else if(json.errorCode == "-101") {
        $.alert('出错:' +json.message, function () {
         location.href = CONFIG.HTML.login;
        });
       }else {
        $.alert(json.message, function () {

        })
       }
      }
     });
    }else {
     $.alert('请输入内容');
    }

   }

  };

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
node.js中的path.join方法使用说明
Dec 08 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
Nov 30 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
ES6知识点整理之函数数组参数的默认值及其解构应用示例
Apr 17 Javascript
vue实现扫码功能
Jan 17 Javascript
js回到页面指定位置的三种方式
Dec 17 Javascript
轻松理解JavaScript之AJAX
Mar 15 #Javascript
jQuery插件ContextMenu自定义图标
Mar 15 #Javascript
JavaScript对象引用与赋值实例详解
Mar 15 #Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 #Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 #Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 #Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 #Javascript
You might like
怎么在Windows系统中搭建php环境
2013/08/31 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
深入理解Python中的super()方法
2017/11/20 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
python各种excel写入方式的速度对比
2020/11/10 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
大一期末自我鉴定
2013/12/13 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
创建文明学校实施方案
2014/03/11 职场文书
关于倡议书的范文
2015/04/29 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
python区块链实现简版工作量证明
2022/05/25 Python