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 相关文章推荐
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
js简单获取表单中单选按钮值的方法
Aug 23 Javascript
bootstrap table操作技巧分享
Feb 15 Javascript
jquery加载单文件vue组件的方法
Jun 20 jQuery
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 Javascript
基于vue实现一个神奇的动态按钮效果
May 15 Javascript
Ant Design Pro 之 ProTable使用操作
Oct 31 Javascript
vue中axios封装使用的完整教程
Mar 03 Vue.js
轻松理解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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php像数组一样存取和修改字符串字符
2014/03/21 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP最常用的正则表达式
2017/02/13 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
深入探究node之Transform
2017/07/20 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
详解Python文本操作相关模块
2017/06/22 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Python3实现购物车功能
2018/04/18 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
python如何保证输入键入数字的方法
2019/08/23 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
浅析Python 条件控制语句
2020/07/15 Python
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
物业管理专业个人的自我评价
2013/11/19 职场文书
化学教育专业自荐信
2014/07/04 职场文书
初中班长竞选稿
2015/11/20 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python