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自定义事件及事件交互原理概述(一)
Feb 01 Javascript
javascript重写alert方法的实例代码
Mar 29 Javascript
JavaScript中的数组特性介绍
Dec 30 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
通过源码分析Vue的双向数据绑定详解
Sep 24 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 Javascript
js中offset,client , scroll 三大元素知识点总结
Sep 11 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
PHP微信分享开发详解
2017/01/14 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
Python使用getpass库读取密码的示例
2017/10/10 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Django 限制访问频率的思路详解
2019/12/24 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python opencv如何实现图片绘制
2020/01/19 Python
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
兼职学生的自我评价
2013/11/24 职场文书
yy司仪主持词
2014/03/22 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书