【JS】封装兼容正版IE9的上传控件,支持图片格式,图片大小,图片宽高验证,支持非图片样式

先废话一小段,大家好,本人首篇处女作,为什么要实现一个上传控件呢,必然是公司需要嘛,
实现整个过程挺揪心的,因为要解决ie9这个兼容性问题,整体来说我前后用了五天的时间来实现。依赖了jquery,其实也可以使用原生编写,不过想偷偷懒,公司也推荐使用jquery。因为是第一次创作,没啥子经验,由于我个人代码注释的习惯比较良好,注释比较多。还是比较容易懂滴,下面由几个方向讲解上传控件。
1.技术知识点;2.整体思路简单讲解;3.关键点讲解;4.整体代码
先看看整体的效果吧;



正题:【技术知识点】
        1.  $.inArray 及阿里巴巴字体库  嘿嘿,其实这个也不算什么知识点,因为我用得少所以稍微列了出来;
        2.  input[type='file']的change事件,及对象自带的fileLIst数组  ie9不支持这个字段;
        3.  new FormData()
        4.  jquery.form提交 
        5.  ie的滤镜   
        6.  ie的ActiveX控件 new ActiveXObject("Scripting.FileSystemObject");

正题:【简单思路讲解】

                 这个控件是属于对象的形式封装的,我以sz={};这个对象实例化;由于需要兼容到ie9(ie11在调试模式下选择的ie9反映不出来ie9的兼容性问题)。所以分开两个思路去解决验证上传的问题,>ie9 不存在兼容性的问题,首先写一个方法sz.judgeIeVersions方法验证是否为<=ie9;然后非ie9采用简单的fileList自带对象完成验证;非ie采用ie滤镜,activeX来完成图片验证;这里上传接口也是采用两个方式,后台方面嘛,<=ie9采用jquery.form上传提交   非ie采用formData上传提交;接口返回值为图片的名称,成功则在图片上方显示勾勾 ;   

        正题:【关键点讲解

         1.控件入口   

                            HTML

            <td colspan="3">  <--这个其实不需要都行
               <div id="fileUpload" class="fullSize">   id为关键  

               </div>
            </td>    

                            JS

            sz.upLoadFile({
                        renderTo :'fileUpload',   //配置div的id
			fileType:'multi',         //配置是否多选
			fileSize:'10000',         //配置文件大小
			fileFormat:['png','jpg'], //配置文件允许的格式
			fileWidthHeight :{        //配置图片宽高(只有图片)
            	             width:'700',
			     height:'800'
			}
	     });

            当然啦,还要引入我写的js文件    sz.ajaxfileupload.js   【下面就是文件的内容啦】

1.验证ie的版本号,<=ie9为true    >ie9 || 非ie为false;

/*     author: YangMingWei   time :2018/5/31
*    describe: 判断是否为ie浏览器. <9则为true; >9且不是ie浏览器为fales;
**/
sz.judgeIeVersions = function () {
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    var isIE = userAgent.indexOf ("compatible") > -1 && userAgent.indexOf ("MSIE") > -1; //判断是否IE<11浏览器
    var isEdge = userAgent.indexOf ("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
    var isIE11 = userAgent.indexOf ('Trident') > -1 && userAgent.indexOf ("rv:11.0") > -1;
    if (isIE) {
        var reIE = new RegExp ("MSIE (\\d+\\.\\d+);");
        reIE.test (userAgent);
        var fIEVersion = parseFloat (RegExp["$1"]);
        if (fIEVersion == 7) {
            return true;
        } else if (fIEVersion == 8) {
            return true;
        } else if (fIEVersion == 9) {
            return true;
        } else if (fIEVersion == 10) {
            return false;
        } else {
            return true;//IE版本<=7
        }
    } else if (isEdge) {
        return false;//edge
    } else if (isIE11) {
        return false; //IE11
    } else {
        return false;//不是ie浏览器
    }
};

2. 处理ie的兼容性问题,因为在ie9下的jquery.form不支持动态添加input[type='file']几马上click(); 所以采用的思路类似递归的感觉,页面加载时渲染一个input在dom上,用户触发file的change事件后,再次添加一个input到dom上,使用css覆盖在上一个input上

/*     author: YangMingWei   time :2018/6/1
*    describe: 回调ie处理函数
**/
sz.handleIEFileChange = function (fileMove, imgWrapper, filePar, defOpt,e) {
    var $imgList = $ ('<div class="imgList" id="imgId_' + fileMove + '"></div>');
    var $imgShow = $ ('<div class="imgShow"></div>');
    var $name = $ ('<div class="name"></div>');
    var $close = $ ('<div class="close sale sale-shanchu" data-delId="' + fileMove + '"></div>');
    var isOk = $ ('<div class="sale sale-gou fileIsOk" data-delId="' + fileMove + '"></div>');
    $close.bind ('click', function () {  //删除图片
        var id = $ (this).attr ('data-delId');
        $ ('#fileId_' + id).remove ();
        $ ('#imgId_' + id).remove ();
    });
    $imgList.append ($imgShow).append ($name).append ($close).append (isOk); //push元素
    //获取图片id
    var tempImgId = 'Img-' + fileMove;
    var img = $ ('<img id="' + tempImgId + '">');
    $imgShow.append (img);
    imgWrapper.append ($imgList);

    var docObj = document.getElementById ('fileId_' + fileMove);
    //IE下,使用滤镜
    docObj.select ();
    window.parent.document.body.focus ();   //关键 使用iframe要这样子,  普通使用dacObj.blur();
    var imgSrc = document.selection.createRange ().text;  //获取到图片路径
    debugger;
    var fileName = imgSrc.substring (imgSrc.lastIndexOf ('\\') + 1);
    $name.html (fileName);//显示名称
    $imgList.attr ('title', fileName);//显示title
    $imgList.attr ('data-name', fileName);//显示title
    $(e.currentTarget).attr('data-file',fileName);
    var fso = null;  //初始化
    try { //尝试获取Active控件
        fso = new ActiveXObject ("Scripting.FileSystemObject");
    }
    catch (exp) { //失败提示教程
        alert ("您的浏览器未启用'ActiveX控件',按照如下设置启动功能;" +
            "IE浏览器->工具->Internet选项->安全->自定义级别->设置\n" +
            "->“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”设置为启用,确定即可。" +
            "");
    }
    if (fso) { //如果能获取active控件
        var tempFileFso = fso.GetFile (imgSrc);  //通过activeX控件获取文件对象
        var flag = true;   //默认验证通过
        //验证格式
        if (defOpt.fileFormat) {
            var Name = tempFileFso.name;
            var fileEnd = Name.substring (Name.indexOf (".") + 1);
            if ($.inArray (fileEnd, defOpt.fileFormat) == -1) {
                flag = false;
                alert ('格式不对');
            }
        }
        //验证大小 (图片size)
        if (defOpt.fileSize) {
            var size = tempFileFso.size / 1024;
            if (size > defOpt.fileSize) {
                flag = false;
                alert ('图片太大');
            }
        }
        //正则验证图片格式
        var test = /\w(\.gif|\.jpeg|\.png|\.jpg|\.bmp)/i;
        if (test.test (imgSrc)) {//入口判断是否为图片
            //验证图片大小(宽高)
            if (defOpt.fileWidthHeight) {
                var image = new Image ();
                image.src = imgSrc;
                image.id = 'tempImg';
                imgWrapper.append (image);
                var w = $ ('#tempImg').width ();
                var h = $ ('#tempImg').height ();
                var infoW = defOpt.fileWidthHeight.width;
                var infoH = defOpt.fileWidthHeight.height;
                if (infoW != w || infoH != h) {
                    flag = false;
                    alert ('图片尺寸不对请使用宽:' + infoW + '__高: ' + infoH);
                }
                $ ('#tempImg').remove ();
            }
            if (flag) {  //如果通过,图片回显
                document.getElementById (tempImgId).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + imgSrc + "')";
            } else { //否则删除input /图片
                $ ('#fileId_' + fileMove).remove ();
                $ ('#imgId_' + fileMove).remove ();
            }
        } else { //如果是文件
            if (flag) {
                img.remove ();//删除图片;添加另外的
                var forMat = tempFileFso.name;
                forMat = forMat.substring (forMat.indexOf (".") + 1);
                var fileImg = $ ('<div class="fileType sale sale-Shapecopy"><span class="format">' + forMat + '</span></div>');
                $imgShow.append (fileImg);
            } else {//否则删除input /图片
                $ ('#fileId_' + fileMove).remove ();
                $ ('#imgId_' + fileMove).remove ();
            }
        }
    }
    fileMove++;
    var nextFile2 = $ ('<input type="file" id="fileId_' + fileMove + '"  name="upfile"/>');
    nextFile2.on ('change', function (e) {
        sz.handleIEFileChange (fileMove, imgWrapper, filePar, defOpt,e);
    });
    filePar.append (nextFile2);
};

3.上传按钮的两个接口   ie9的采用jquery.form的提交方式,非ie采用formData提交方式

/*     author: YangMingWei   time :2018/5/31
    *    describe: 上传处理函数  ie/非ie两个方式,采用两个接口,
    *    根据项目更换接口
    **/
    btn.on ('click', function () {
        if (isIE) {
            //采用jqueryform提交
            if(!btn.hasClass('loading')){
                btn.addClass('loading');
                submit ({
                    url     : ctx + '/act/test/uploadFiles',
                    form    : '#' + formId,
                    dataType: 'text',
                    success : function (data) {
                        var Data = eval ('(' + data + ')');
                        if (Data && Data.picUrl.length > 0) {
                            //成功提示信息
                            var okArr = Data.picUrl;
                            for (var B = 0; B < okArr.length; B++) {
                                var tempB = okArr[B];
                                imgWrapper.find (".imgList[data-name='" + tempB + "']").find ('.fileIsOk').addClass ('yes');
                                filePar.find("input[data-file='" + tempB + "']").remove();
                            }
                            btn.removeClass('loading');
                        }
                    }
                });
            }else{
                alert('正在上传');
            }

        } else {
            //非ie采用formData方式
            var formData = new FormData (form[0]);
            //循环加入
            for (var i = 0; i < fileListArr.length; i++) {
                var temp = fileListArr[i];
                if (temp != null) {       
                    //append的名称要不一样
                    formData.append ('files_' + i, temp);
                }
            }
            $.ajax ({
                type       : "post",
                url        : ctx + '/act/test/uploadFiles2',//地址
                data       : formData,
                processData: false,
                contentType: false,
                success    : function (data) {
                    if (data && data.picUrl.length > 0) {
                        var pic_nameArr = data.picUrl;
                        //成功提示
                        for (var A = 0; A < pic_nameArr.length; A++) {
                            var tempA = pic_nameArr[A];
                            imgWrapper.find (".imgList[data-name='" + tempA + "']").find ('.fileIsOk').addClass ('yes');
                            fileListArr.length = 0;
                        }
                    }
                },
                error      : function (e) {
                    console.log (e);
                    console.log (a);
                }
            });
        }
    });

            大笑大笑我认为的难点就在这些了咯,,本来我想上传文件上来的,但是不晓得怎么弄地,只能CV在这里咯

        正题:【整体代码】 入口代码我就不重复了。上面有

CSS  我使用less来写所以权值比较高

.fullSize {
  width: 750px;
  border: 1px solid #c3d9e0;
}
.fullSize .par .wrapper {
  float: left;
  position: relative;
  margin: 5px 10px;
  width: 50%;
  height: 70px;
  line-height: 70px;
  font-size: 50px;
  text-align: center;
  color: #aaa;
  border: 1px dashed #aaa;
}
.fullSize .par .wrapper:hover {
  color: #e43;
}
.fullSize .par .wrapper > input[type='file'] {
  width: 100%;
  height: 100%;
  opacity: 1;
  position: absolute;
  top: 0;
  left: 0;
  cursor: pointer;
}
.fullSize .par .uploadBtn {
  float: left;
  margin: 5px 10px;
  width: 20%;
  height: 70px;
  text-align: center;
  line-height: 70px;
  font-size: 17px;
  background: #3CBAFF;
  color: #fff;
  cursor: pointer;
  -webkit-transition: all .3s;
  -moz-transition: all .3s;
  -ms-transition: all .3s;
  -o-transition: all .3s;
  transition: all .3s;
}
.fullSize .par .uploadBtn:hover {
  background: #6CAEF5;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}
.fullSize .imgWrapper {
  padding: 0 5px;
}
.fullSize .imgWrapper::after {
  display: block;
  content: '';
  clear: both;
}
.fullSize .imgWrapper .imgList {
  float: left;
  position: relative;
  width: 100px;
  height: 100px;
  overflow: hidden;
  margin: 5px;
}
.fullSize .imgWrapper .imgList .imgShow {
  width: 100px;
  height: 80px;
}
.fullSize .imgWrapper .imgList .imgShow img {
  width: 100px;
  height: 80px;
}
.fullSize .imgWrapper .imgList .imgShow .fileType {
  font-size: 68px;
  text-align: center;
  line-height: 80px;
  width: 100px;
  height: 80px;
  color: #F96948;
  position: relative;
  overflow: hidden;
}
.fullSize .imgWrapper .imgList .imgShow .fileType .format {
  position: absolute;
  top: 13px;
  left: 31px;
  display: inline-block;
  font-size: 19px;
  font-weight: 900;
  color: #F96948;
}
.fullSize .imgWrapper .imgList .name {
  width: 100px;
  height: 20px;
  line-height: 20px;
  text-indent: 5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
  color: #aaa;
}
.fullSize .imgWrapper .imgList .close {
  position: absolute;
  top: -100px;
  left: 0;
  background: rgba(0, 0, 0, 0.1);
  -webkit-transition: all .4s;
  -moz-transition: all .4s;
  -ms-transition: all .4s;
  -o-transition: all .4s;
  transition: all .4s;
  width: 100px;
  height: 100px;
  font-size: 60px;
  text-align: center;
  line-height: 100px;
  color: #e43;
  font-weight: bold;
  cursor: pointer;
  z-index: 100;
}
.fullSize .imgWrapper .imgList:hover .close {
  top: 0;
}
.fullSize .imgWrapper .imgList .fileIsOk {
  position: absolute;
  z-index: 0;
  top: 0;
  left: 0;
  width: 100px;
  height: 80px;
  text-align: center;
  line-height: 80px;
  font-size: 62px;
  color: #67C939;
  display: none;
}
.fullSize .imgWrapper .imgList .fileIsOk.yes {
  display: block;
}
#tempImg {
  position: fixed;
  top: 0;
  left: 0;
  z-index: -100;
  opacity: 0;
}

JS   整个的JS文件

sz.upLoadFile = function (opts) {

    var defOpt = {
        renderTo       : null,//渲染元素至某元素中,必须的
        fileType       : null, //上传类型,单选多选,默认单选
        fileSize       : 1024 * 100,  //验证大小
        fileFormat     : null,//验证格式
        fileWidthHeight: null, //验证宽高

    };
    defOpt = $.extend (defOpt, opts);
    ///判断是否IE<9浏览器
    var isIE = sz.judgeIeVersions ();
    var _id = opts.renderTo;//渲染元素至某元素中,必须的
    var _type = opts.fileType; //上传类型,单选多选,默认单选
    var _verifySize = opts.fileSize;  //验证大小
    var _verifyFormat = opts.fileFormat; //验证格式
    var _verifyWidthHeight = opts.fileWidthHeight; //验证宽高

    var fileMove = 0;

    var par = $ ('<div class="par clear"></div>');//整体容器
    var filePar = $ ('<div class="wrapper" id="filePar">+双击选择文件+</div>');//上传容器
    var btn = $ ('<div class="uploadBtn"><i class="sale sale-daochu"></i>上传文件</div>'); //上传按钮
    //如果是多选的话添加属性
    var fileListArr = []; //非ie用来formData文件容器
    var formId = _id + 'form'; //表单的id;
    //form表单
    var form = $ ('<form action="' + ctx + '\/act/test/uploadFiles" class="par clear" method="post" id="' + formId + '" enctype="multipart/form-data"></form>');
    var inpWrapper = $ ('<div style="height:0; overflow: hidden"></div>');
    form.append (inpWrapper);
    //没啥用
    var $ggForm = $ ('<form action="' + ctx + '\/act/test/uploadFiles" method="post" id="ggForm" enctype="multipart/form-data" style="display:none"></form>');
    var imgWrapper = $ ('<div class="imgWrapper"></div>');//存回显图片容器
    form.append (filePar).append (btn);//按顺序添加元素

    var file = $ ('<input type="file" id="fileId_' + fileMove + '"  name="upfile"/>');
    filePar.append (file);
    if (_type === 'multi') {
        file.attr ('multiple', 'multiple');
    }
    if (isIE) {
        file.attr ('data-ie', 'yes');
        //ie的超级坑
        file.on ('change', function (e) {
            sz.handleIEFileChange (fileMove, imgWrapper, filePar, defOpt,e);
        });
    } else {
        //非ie的change事件
        file.on ('change', function (e) {
            var _this = $ (e.currentTarget)[0];
            var fileList = _this.files;
            for (var A = 0; A < fileList.length; A++) {
                var flag = true;
                var tempA = fileList[A];
                if (_verifyFormat) {
                    var fileEnd = tempA.name.substring (tempA.name.indexOf (".") + 1);
                    if ($.inArray (fileEnd, _verifyFormat) == -1) {
                        flag = false;
                        alert ('格式不对');
                    }
                }
                //验证图片大小
                if (_verifySize) {
                    var fileSize = tempA.size / 1024;
                    if (fileSize > _verifySize) {
                        alert ('图片大小不对');
                    }
                }
                //验证图片宽高
                if (_verifyWidthHeight) {
                    var _URL = window.URL || window.webkitURL;
                    var img = new Image ();
                    img.src = _URL.createObjectURL (tempA);
                    img.id = 'tempImg';
                    imgWrapper.append (img);
                    //因为是属于回调函数,假如不吻合要删除list及删除样式dom
                    img.onload = function () {
                        var w = $ ('#tempImg').width ();
                        var h = $ ('#tempImg').height ();
                        var infoW = _verifyWidthHeight.width;
                        var infoH = _verifyWidthHeight.height;
                        if (w != infoW || h != infoH) {
                            alert ('宽高不对');
                            for (var B = 0; B < fileListArr.length; B++) {
                                var tempB = fileListArr[B];
                                if (tempB.name == tempA.name) {
                                    fileListArr.splice (B, 1);
                                    imgWrapper.find ('.imgList[data-name="' + tempA.name + '"]').remove ();
                                }
                            }
                        }
                        img.remove ();
                    };
                }
                if (flag) {
                    fileListArr.push (tempA);
                    sz.getSetImg (imgWrapper, tempA, fileListArr);
                }
            }
            debugger;
            _this.value='';
        })
    }
    // file.click ();
    // });
    /*     author: YangMingWei   time :2018/5/31
    *    describe: 上传处理函数  ie/非ie两个方式,采用两个接口,
    *    根据项目更换接口
    **/
    btn.on ('click', function () {
        if (isIE) {
            //采用jqueryform提交
            if(!btn.hasClass('loading')){
                btn.addClass('loading');
                submit ({
                    url     : ctx + '/act/test/uploadFiles',
                    form    : '#' + formId,
                    dataType: 'text',
                    success : function (data) {
                        var Data = eval ('(' + data + ')');
                        if (Data && Data.picUrl.length > 0) {
                            //成功提示信息
                            var okArr = Data.picUrl;
                            for (var B = 0; B < okArr.length; B++) {
                                var tempB = okArr[B];
                                imgWrapper.find (".imgList[data-name='" + tempB + "']").find ('.fileIsOk').addClass ('yes');
                                filePar.find("input[data-file='" + tempB + "']").remove();
                            }
                            btn.removeClass('loading');
                        }
                    }
                });
            }else{
                alert('正在上传');
            }

        } else {
            //非ie采用formData方式
            var formData = new FormData (form[0]);
            //循环加入
            for (var i = 0; i < fileListArr.length; i++) {
                var temp = fileListArr[i];
                if (temp != null) {
                    //append的名称要不一样
                    formData.append ('files_' + i, temp);
                }
            }
            $.ajax ({
                type       : "post",
                url        : ctx + '/act/test/uploadFiles2',//地址
                data       : formData,
                processData: false,
                contentType: false,
                success    : function (data) {
                    if (data && data.picUrl.length > 0) {
                        var pic_nameArr = data.picUrl;
                        //成功提示
                        for (var A = 0; A < pic_nameArr.length; A++) {
                            var tempA = pic_nameArr[A];
                            imgWrapper.find (".imgList[data-name='" + tempA + "']").find ('.fileIsOk').addClass ('yes');
                            fileListArr.length = 0;
                        }
                    }
                },
                error      : function (e) {
                    console.log (e);
                    console.log (a);
                }
            });
        }
    });
    $ ('#' + _id).append (form).append (imgWrapper).append ($ggForm);
};
/*     author: YangMingWei   time :2018/6/1
*    describe: 回调ie处理函数
**/
sz.handleIEFileChange = function (fileMove, imgWrapper, filePar, defOpt,e) {
    var $imgList = $ ('<div class="imgList" id="imgId_' + fileMove + '"></div>');
    var $imgShow = $ ('<div class="imgShow"></div>');
    var $name = $ ('<div class="name"></div>');
    var $close = $ ('<div class="close sale sale-shanchu" data-delId="' + fileMove + '"></div>');
    var isOk = $ ('<div class="sale sale-gou fileIsOk" data-delId="' + fileMove + '"></div>');
    $close.bind ('click', function () {  //删除图片
        var id = $ (this).attr ('data-delId');
        $ ('#fileId_' + id).remove ();
        $ ('#imgId_' + id).remove ();
    });
    $imgList.append ($imgShow).append ($name).append ($close).append (isOk); //push元素
    //获取图片id
    var tempImgId = 'Img-' + fileMove;
    var img = $ ('<img id="' + tempImgId + '">');
    $imgShow.append (img);
    imgWrapper.append ($imgList);

    var docObj = document.getElementById ('fileId_' + fileMove);
    //IE下,使用滤镜
    docObj.select ();
    window.parent.document.body.focus ();   //关键 使用iframe要这样子,  普通使用dacObj.blur();
    var imgSrc = document.selection.createRange ().text;  //获取到图片路径
    debugger;
    var fileName = imgSrc.substring (imgSrc.lastIndexOf ('\\') + 1);
    $name.html (fileName);//显示名称
    $imgList.attr ('title', fileName);//显示title
    $imgList.attr ('data-name', fileName);//显示title
    $(e.currentTarget).attr('data-file',fileName);
    var fso = null;  //初始化
    try { //尝试获取Active控件
        fso = new ActiveXObject ("Scripting.FileSystemObject");
    }
    catch (exp) { //失败提示教程
        alert ("您的浏览器未启用'ActiveX控件',按照如下设置启动功能;" +
            "IE浏览器->工具->Internet选项->安全->自定义级别->设置\n" +
            "->“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”设置为启用,确定即可。" +
            "");
    }
    if (fso) { //如果能获取active控件
        var tempFileFso = fso.GetFile (imgSrc);  //通过activeX控件获取文件对象
        var flag = true;   //默认验证通过
        //验证格式
        if (defOpt.fileFormat) {
            var Name = tempFileFso.name;
            var fileEnd = Name.substring (Name.indexOf (".") + 1);
            if ($.inArray (fileEnd, defOpt.fileFormat) == -1) {
                flag = false;
                alert ('格式不对');
            }
        }
        //验证大小 (图片size)
        if (defOpt.fileSize) {
            var size = tempFileFso.size / 1024;
            if (size > defOpt.fileSize) {
                flag = false;
                alert ('图片太大');
            }
        }
        //正则验证图片格式
        var test = /\w(\.gif|\.jpeg|\.png|\.jpg|\.bmp)/i;
        if (test.test (imgSrc)) {//入口判断是否为图片
            //验证图片大小(宽高)
            if (defOpt.fileWidthHeight) {
                var image = new Image ();
                image.src = imgSrc;
                image.id = 'tempImg';
                imgWrapper.append (image);
                var w = $ ('#tempImg').width ();
                var h = $ ('#tempImg').height ();
                var infoW = defOpt.fileWidthHeight.width;
                var infoH = defOpt.fileWidthHeight.height;
                if (infoW != w || infoH != h) {
                    flag = false;
                    alert ('图片尺寸不对请使用宽:' + infoW + '__高: ' + infoH);
                }
                $ ('#tempImg').remove ();
            }
            if (flag) {  //如果通过,图片回显
                document.getElementById (tempImgId).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + imgSrc + "')";
            } else { //否则删除input /图片
                $ ('#fileId_' + fileMove).remove ();
                $ ('#imgId_' + fileMove).remove ();
            }
        } else { //如果是文件
            if (flag) {
                img.remove ();//删除图片;添加另外的
                var forMat = tempFileFso.name;
                forMat = forMat.substring (forMat.indexOf (".") + 1);
                var fileImg = $ ('<div class="fileType sale sale-Shapecopy"><span class="format">' + forMat + '</span></div>');
                $imgShow.append (fileImg);
            } else {//否则删除input /图片
                $ ('#fileId_' + fileMove).remove ();
                $ ('#imgId_' + fileMove).remove ();
            }
        }
    }
    fileMove++;
    var nextFile2 = $ ('<input type="file" id="fileId_' + fileMove + '"  name="upfile"/>');
    nextFile2.on ('change', function (e) {
        sz.handleIEFileChange (fileMove, imgWrapper, filePar, defOpt,e);
    });
    filePar.append (nextFile2);
};


/*     author: YangMingWei   time :2018/5/31
*    describe: 获取文件并渲染图片,非ie(>9)方法
**/
sz.getSetImg = function (renderTo, file, fileArr) {
    var name = file.name;
    var time = file.lastModified;
    //图片列表的容器.data-name用于删除
    var $imgList = $ ('<div class="imgList" data-name="' + name + '" title="' + name + '"></div>');
    var $imgShow = $ ('<div class="imgShow"></div>');
    //显示名称
    var $name = $ ('<div class="name">' + name + '</div>');
    //删除按钮
    var $close = $ ('<div class="close sale sale-shanchu" data-name="' + name + '"></div>');
    //上传成功的提示信息.采用阿里巴巴字体
    var isOk = $ ('<div class="sale sale-gou fileIsOk"></div>');
    //删除按钮处理函数
    $close.bind ('click', function () {
        var CloseName = $ (this).attr ('data-name');
        for (var i = 0; i < fileArr.length; i++) {
            var tempA = fileArr[i];
            if (tempA.name == CloseName) {
                fileArr.splice (i, 1);
            }
        }
        //删除dom
        renderTo.find ('.imgList[data-name="' + CloseName + '"]').remove ();
    });
    //按顺序添加到容器中
    $imgList.append ($imgShow).append ($name).append ($close).append (isOk);
    var imgtest = /image\/(\w)*/;//图片文件测试
    var img = null;
    //如果是图片渲染图片样式
    if (imgtest.test (file.type)) {
        var imgUrlStr = "";//获取文件路径
        if (window.createObjectURL != undefined) { // basic
            imgUrlStr = window.createObjectURL (file);
        } else if (window.URL != undefined) { // mozilla(firefox)
            imgUrlStr = window.URL.createObjectURL (file);
        } else if (window.webkitURL != undefined) { // webkit or chrome
            imgUrlStr = window.webkitURL.createObjectURL (file);
        }
        img = $ ('<img src="' + imgUrlStr + '" alt="' + name + '">');
        //否则渲染文件+格式名图片样式
    } else {
        var format = name.slice (name.lastIndexOf ('.') + 1).toUpperCase ();
        img = $ ('<div class="fileType sale sale-Shapecopy"><span class="format">' + format + '</span></div>');
    }
    $imgShow.append (img);
    renderTo.append ($imgList);//性能优化,最后添加到dom
};
/*     author: YangMingWei   time :2018/5/31
*    describe: 判断是否为ie浏览器. <9则为true; >9且不是ie浏览器为fales;
**/
sz.judgeIeVersions = function () {
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
    var isIE = userAgent.indexOf ("compatible") > -1 && userAgent.indexOf ("MSIE") > -1; //判断是否IE<11浏览器
    var isEdge = userAgent.indexOf ("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
    var isIE11 = userAgent.indexOf ('Trident') > -1 && userAgent.indexOf ("rv:11.0") > -1;
    if (isIE) {
        var reIE = new RegExp ("MSIE (\\d+\\.\\d+);");
        reIE.test (userAgent);
        var fIEVersion = parseFloat (RegExp["$1"]);
        if (fIEVersion == 7) {
            return true;
        } else if (fIEVersion == 8) {
            return true;
        } else if (fIEVersion == 9) {
            return true;
        } else if (fIEVersion == 10) {
            return false;
        } else {
            return true;//IE版本<=7
        }
    } else if (isEdge) {
        return false;//edge
    } else if (isIE11) {
        return false; //IE11
    } else {
        return false;//不是ie浏览器
    }
};

/*     author: YangMingWei   time :2018/5/31
*    describe: form提交上传图片,  依赖jquery的jquery.form.js
*    所有方法可重写;
**/
function submit(_options) {
    var defaults = {
        uploadFile: true,//是否上传文件
        submitForm: false,//是否提交表单方式,如果使用此方式则不使用ajax方式
        form      : '#editForm',
        button    : '#submit',//触发提交表单事件的按钮
        async     : true,//异步方式
        url       : '',
        data      : '',//默认$(form).serializeArray()
        type      : 'POST',
        dataType  : 'json',//返回的数据格式json,xml,text
        timeout   : 0,//超时
        closeMe   : true,//操作成功提示后是否关闭窗口
        error     : function (xhr, opt, exc) {
            // alert ('异步请求发生异常,异常信息:' + xhr.statusText);
            // // $ ('body').unmask ();
            // $ (opts.button).attr ('disabled', false);
        },
        onSuccess : function (rs) {
            debugger;
            // window.returnValue = 'true';
            // alert (rs.message);
            // if (opts.closeMe) top.close ();
        },
        onFailure : function (rs) {

        },
        success   : function (rs) {
            debugger;

        }//一般不要覆盖此方法
    };
    var opts = $.extend ({}, defaults, _options);
    //上传文件
    var $frm = $ (opts.form);
    $frm.ajaxSubmit (opts);//采用jquery.form提交文件
}


猜你喜欢

转载自blog.csdn.net/weixin_35928292/article/details/80578397
今日推荐