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 相关文章推荐
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
JavaScript执行效率与性能提升方案
Dec 21 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
Nov 16 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
JS运动特效之链式运动分析
Jan 24 Javascript
vue实现移动端悬浮窗效果
Dec 01 Javascript
node.js命令行教程图文详解
May 27 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
Python中asyncore的用法实例
2014/09/29 Python
Python中单例模式总结
2018/02/20 Python
python实现自动发送报警监控邮件
2018/06/21 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Python 实现一个计时器
2020/07/28 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
总经理岗位职责范本
2014/02/02 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
企业培训简报范文
2015/07/20 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
java开发双人五子棋游戏
2022/05/06 Java/Android