亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > JavaScript > 正文

瀏覽器圖片選擇預(yù)覽、旋轉(zhuǎn)、批量上傳的JS代碼實(shí)現(xiàn)

2019-11-20 21:31:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

工作中遇到的業(yè)務(wù)場(chǎng)景,和同事一起研究了下,主要是為了兼容IE版本

其實(shí)就是一些瑣碎的知識(shí)點(diǎn)在網(wǎng)上搜集下解決方式,然后集成了下,主要有以下點(diǎn):

1. IE input type=file的圖片預(yù)覽要用IE的filter css

    progid:DXImageTransform.Microsoft.AlphaImageLoader

   chrome/firefox則用File api的file reader

2. 圖片旋轉(zhuǎn),IE用progid:DXImageTransform.Microsoft.Matrix的filter(filter可以組合用,用空格隔開(kāi))

   chrome/firefox用canvas

3. 上傳圖片,我用的都是不可見(jiàn)的iframe 里的form動(dòng)態(tài)的添加input[type=file]去實(shí)現(xiàn)。chrome/firefox可以用xhr,但我懶得去修改了

4. 其中為了實(shí)現(xiàn)上傳圖片不刷新本頁(yè)面,又能反復(fù)選擇文件,所以還用一個(gè)iframe專(zhuān)門(mén)維護(hù)一個(gè)input[type=file]的列表,比較偷巧。

可以參考下代碼,主要是一個(gè)主html,然后兩個(gè)iframe的html,上傳的服務(wù)端返回的數(shù)據(jù)為上傳成功的file name,用于刪除預(yù)覽圖。

復(fù)制代碼 代碼如下:

// 上傳回調(diào)
        // resultList -> ['file1', 'file2'] 為上傳成功的file name
        var uploadCallback = function(resultList){
            console.log(JSON.stringify(resultList));

            var i = 0;
            for(; i < resultList.length; i++){
                var index = resultList[i].substr('file'.length);
                $(':checkbox[value=' + index + ']').parent().parent().remove();
            }
        };

        $(function(){
            // 保存圖片旋轉(zhuǎn)的角度,以便提交給服務(wù)端處理
            var rotateAng = {};
            // 用于命名后綴的序號(hào)
            var cc = 0;

            // 如果是chrome/ff,需要用file api去生成img
            var genImgTpl = function(input, index){
                return '<img src="/webx/public/1.png" class="main" id="img' + index + '" />';
            };

            var readImgFromInput = function(_input, index){
                var inputDom = _input[0];
                // chrome/ff
                if(inputDom['files']){
                    var reader = new FileReader();
                    reader.onload = function(e){
                        $('img.main:last').attr({src : e.target.result});
                    }
                    reader.readAsDataURL(inputDom['files'][0]);
                }else{
                    var src = _input[0].value;

                    var imgDom = $('#img' + index);
                    imgDom.attr('src-old', src);
                    imgDom.css({
                        float: 'left',
                        position: 'relative',
                        overflow: 'hidden',
                        width: '195px',
                        height: '195px'
                    });

                    imgDom.css({'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=/"" + src + "/")"});
                }
            };

            var showImg = function(_input){
                var index = ++cc;

                _input.addClass('hide');
                _input.attr('name', 'file' + index);
                _input.attr('data-index', index);

                var iframeWin = $('#choose')[0].contentWindow;
                iframeWin.addInput(_input);

                var tpl = '<div>' + genImgTpl(_input, index) +
                    '<span class="choose"><input type="checkbox" value="' + index + '" checked="true" /></span>' +
                    '<span class="opts turn-right"><img src="img/rightBtn.png" /></span>' +
                    '</div>';
                $('#imgDiv').append(tpl);

                readImgFromInput(_input, index);
            };
            var addAnother = function(){
                $('#uploadBtn').before('<input type="file" name="file" />');
            };

            // input[type=file]的綁定事件
            $('#uploadDiv input').live('change', function(){
                var path = this.value;
                if(!path){
                    return;
                }

                showImg($(this));
                addAnother();
            });

            // 可以在checkbox時(shí)候remove input
//            $('#imgDiv input:checkbox').live('change', function(){
//                var isChecked = $(this).is(':checked');
//                console.log(isChecked);
//            });

            $('#imgDiv span.turn-right').live('click', function(){
                // 上次旋轉(zhuǎn)的角度
                var index = $(this).siblings('span.choose').find('input').val();
                var oldAng = rotateAng[index] || 0;
                var newAng = oldAng + 90;
                rotateAng[index] = newAng;

                $('#img' + index).rotate(90);
            });

            // 表單提交時(shí)候根據(jù)checkbox,刪除未choose的input[type=file]
            $('#uploadBtn').click(function(){
                var choosedNum = $('#imgDiv input:checkbox').filter(':checked').length;
                if(!choosedNum){
                    alert('請(qǐng)選擇上傳文件!');
                    return false;
                }

                // 選中的序號(hào)數(shù)組
                var choosedIndexList = $('#imgDiv input:checkbox').filter(':checked').map(function(){
                    return this.value;
                }).get();

                // 兩個(gè)iframe,一個(gè)用于保存選擇的input[type=file]
                // 一個(gè)用于form upload
                var uploadIframe = $('#upload')[0].contentWindow;
                var chooseIframe = $('#choose')[0].contentWindow;

                var i = 0;
                for(; i < choosedIndexList.length; i++){
                    var index = choosedIndexList[i];
                    var inputFile = chooseIframe.$('#uploadDiv input').filter('[data-index=' + index + ']');
                    uploadIframe.$('#uploadForm').append(inputFile);

                    // 旋轉(zhuǎn)度數(shù)
                    var ang = rotateAng[index] || 0;
                    if(ang % 360 != 0){
                        var tplInput = '<input type="hide" name="ang' + index + '" value="' + ang + '" />';
                        uploadIframe.$('#uploadForm').append(tplInput);
                    }
                }

                uploadIframe.doUpload();

                return false;
            });
        });


IE7、8、9和chrome中測(cè)試沒(méi)有問(wèn)題

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩精品在线免费播放| 无码日本精品xxxxxxxxx| 妺妺窝人体色www聚色窝仙踪| 亚洲国产一区二区三区在线观看| 91a在线视频| 国产18精品乱码免费看| 91高清在线观看视频| 精品国精品国产| 国产成人精品www牛牛影视| 污污视频在线看| 成人激情免费电影网址| 女囚岛在线观看| 亚洲一区二区在线免费观看| 久久综合国产精品台湾中文娱乐网| 精品免费视频一区二区| 97影院手机在线观看| 亚洲а∨天堂久久精品2021| 久久综合九色综合88i| 日本xxxxxx| 福利精品一区| 永久久久免费浮力影院| 欧美手机在线观看| 亚洲欧洲日韩在线| 一区二区三区高清不卡| 欧美日韩国产在线| 综合天堂久久久久久久| 亚洲av激情无码专区在线播放| 蜜桃av色综合| 宅男噜噜噜66国产免费观看| av亚洲精华国产精华精| 丰满少妇被猛烈进入| 这里只有精品免费| 亚洲一区综合| 国产欧美日韩在线看| 91视频88av| 91啪九色porn原创视频在线观看| 国产精品自产拍在线网站| 欧美激情精品久久久久久久变态| a级黄色片网站| 久久精品五月天| 色欲久久久天天天综合网| 国产日韩精品久久| 成人午夜免费av| 手机看片福利在线| 国产大片在线免费观看| 国产精品海角社区在线观看| 97超碰人人模人人爽人人看| 黄色三级中文字幕| 深夜福利一区二区| 中国丰满熟妇xxxx性| 国产欧美一区二区精品久导航| 欧美激情一区二区久久久| 全球成人免费直播| 久久综合亚洲| 国产福利在线| 日韩在线免费视频| 在线免费观看h视频| 少妇高潮喷水久久久久久久久久| 奇米影视亚洲色图| 成人动漫在线观看视频| 亚洲国内在线| 久久久91精品国产| 中文字幕免费在线| 欧美videos大乳护士334| 色悠久久久久综合网小说| 欧美亚洲人成在线| 在线观看国产一区二区| 神马午夜电影一区二区三区在线观看| 国产一区精品视频| 国产精品视频免费播放| 麻豆国产精品一区二区三区| 中文字幕在线免费看线人| 国产chinese精品一区二区| 免费av一级电影| 亚洲国产综合久久| 97超碰国产精品| 日日摸夜夜夜夜夜添| 性一交一乱一伧国产女士spa| 激情婷婷丁香| 久久久99精品免费观看| 永久亚洲成a人片777777| 日韩中文在线视频| 欧美日本不卡高清| 免费看黄色a级片| 成a人片在线观看| 国产一级视频在线播放| 亚洲精品一区二区精华| 成人网18免费看| 最新国产麻豆精品| 亚洲自拍另类欧美丝袜| 中文字幕免费不卡| 天天综合入口| 国产伦精品一区二区三区免| 久久久99999| 亚洲va国产va欧美va观看| 欧美日韩亚洲在线| 国产传媒在线| 黄色av观看| 91九色综合久久| caoporn超碰97| 日本黄色动态图| 国产精品专区免费| 国产不卡在线观看视频| 国产一级片久久| 精品一区欧美| 7777精品伊人久久久大香线蕉最新版| 久久97精品久久久久久久不卡| l8videosex性欧美69| 欧美电影精品一区二区| 亚洲v精品v日韩v欧美v专区| 性欧美xxx极品另类| 清纯唯美一区二区三区| 国产麻豆日韩欧美久久| 免费观看成人鲁鲁鲁鲁鲁视频| 91精品久久久久久久久久久久久| 国产精品宾馆| 尤物视频免费| 国产毛片欧美毛片久久久| jizzyou欧美16| 久久久久免费视频| 国产欧美日产一区| 免费观看黄色av| 成年人看的毛片| 国产精品电影一区二区三区| 日韩大片在线观看| 免费看黄视频网站| 最色在线观看| www.毛片com| 我要看一级黄色大片| 久久免费看视频| 亚洲三级欧美| 欧美大香线蕉线伊人久久| 99视频精品全部免费在线视频| www.青草| 久久久久久久电影一区| 一区二区三区日本久久久| 日本少妇aaa| 天天躁日日躁狠狠躁喷水| 国产精品v日韩精品v在线观看| jvid福利写真一区二区三区| 国产成人高潮免费观看精品| 中文字幕另类日韩欧美亚洲嫩草| 国产一区二区在线观看免费播放| 激情成人开心网| 亚洲精品一区久久久久久| 欧美另类bbbxxxxx另类| 国产精品久久久久久av| 中文网丁香综合网| 99在线观看免费| 日日摸日日碰夜夜爽无码| 欧美一卡二卡在线观看| 99在线精品免费视频九九视| 精品人妻一区二区三区香蕉| 国产成人a人亚洲精品无码| 中文字幕乱码中文乱码51精品| 九色在线播放| 日一区二区三区| 国产99在线免费| 中文一区在线观看| 性欧美videossex精品| 中文字幕在线不卡视频| 欧美日韩一区二区三区不卡视频| 美女扒开内裤让男人桶| 亚洲成av人片乱码色午夜| 免费看污片的软件| 老牛影视精品| 欧美一级二级三级九九九| 日韩欧美区一区二| 日韩精品视频一区二区在线观看| 久久99热这里只有精品国产| 国产香蕉视频在线看| gogogo高清免费观看在线视频| 国产视频一区二区三区在线观看| 日韩精品电影一区亚洲| 中文字幕av一区二区三区免费看| 另类小说色综合| 亚洲欧洲在线观看| 一区二区在线观看免费| 精品一区在线| 中文字幕一区二区三区人妻不卡| 欧美日韩在线观看成人| 26uuuu精品一区二区| 性xxxx视频播放免费| 亚洲动漫第一页| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲欧美另类久久久精品| 一区二区精品免费视频| 97一区二区国产好的精华液| 秋霞午夜一区二区三区视频| 啪啪av大全导航福利网址| 9i看片成人免费高清| 国产视频在线观看网站| 国产免费一区二区三区在线能观看| 久久久久久久久久99| 国产乱人伦精品一区二区三区| 本网站久久精品| 欧美午夜精品在线| 九九在线观看免费视频| 欧美一区免费观看| 亚洲视频电影| 亚洲欧美成人综合| 国产精品视频大全| 69p69国产精品| 久久久久久美女| 在线观看国产小视频| 亚洲色图激情小说| 国产成+人+综合+亚洲欧洲| 久久久一区二区三区| 久久精品二区三区| 国产一区二区三区在线视频观看| 99热在线免费| 亚洲一区二区三区三| 极品国产人妖chinesets亚洲人妖| 欧美在线一卡| 黄色网址在线免费播放| 欧美成人69| 国产欧美日韩另类视频免费观看| 色综合久久88色综合天天免费| 色综合天天综合在线视频| 天堂а√在线资源在线| 日韩精品一区二区三区色欲av| 亲子乱一区二区三区电影| 人人干狠狠干| 亲子伦视频一区二区三区| 国产精品资源站在线| 福利网址在线| 国产乱人伦精品一区二区在线观看| 免费毛片视频网站| 亚洲jjzzjjzz在线观看| 国产成人午夜高潮毛片| 日韩人妻一区二区三区蜜桃视频| 日韩欧美专区在线| 亚洲精品第一国产综合精品| 天堂久久av| 日韩欧美电影一区| 成人一级片在线观看| 99久久久精品| 国产91一区二区三区| 日本欧美在线视频| 亚洲二区三区不卡| 午夜精品久久久久久久99热黄桃| 性欧美精品中出| 日韩欧美中文字幕在线观看| 人善交video高清| 日韩三级中文字幕| 国产性生交xxxxx免费| 亚洲国产www| 亚洲 欧美 日韩 在线| 国产精品一区在线观看乱码| 欧美 日韩 国产 一区| 中文字幕制服丝袜一区二区三区| 一区二区三区精品视频| 97超碰成人| 972aa.com艺术欧美| 亚洲影视资源网| 国产区一区二| 久久一区91| 久久久久久久久久久久久91| 欧美日韩免费一区| 蜜桃麻豆影像在线观看| 欧美在线视屏| 国产真实生活伦对白| 日本高清不卡一区| 黄色一级大片免费| 黑人久久a级毛片免费观看| 成人影院天天5g天天爽无毒影院| 欧美成人另类视频| 久久精品99| 婷婷久久久久久| 国产精品欧美色图| 日本三级久久| 青草全福视在线| 色婷婷综合久久久久中文字幕1| 五月婷婷丁香花| 91精品欧美一区二区三区综合在| 国产精品国色综合久久| 亚洲精品久久久久久久蜜桃| 在线观看视频网站你懂得| 日韩久久久久久久久久久久久| www.国产精| 美女视频黄a视频全免费观看| 天堂在线第六区| 精品1卡二卡三卡四卡老狼| 亚洲综合网在线观看| 中文字幕日韩av| 亚洲精品一区二区三区网址| 噜噜噜在线观看播放视频| 久久人妻少妇嫩草av无码专区| 色综合亚洲图丝熟| 一级特黄特色的免费大片| 加勒比一区二区三区在线| 亚洲精品va| 天堂аⅴ在线最新版在线| 黄色a级片免费| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲欧美日韩成人高清在线一区| 动漫成人在线观看| 色偷偷免费视频| 亚洲黄色片在线观看| 伊人中文字幕在线观看| 欧美国产激情18| 麻豆视频免费看| 男女h黄动漫啪啪无遮挡软件| 在线观看欧美激情| 亚洲精品免费电影| 国产一区二区三区久久| 91玉足脚交嫩脚丫在线播放| 欧美多人爱爱视频网站| 国产精品福利在线观看网址| www.久久久久久| 婷婷六月天在线| 欧美视频精品在线| 青青草国产免费一区二区下载| 99久久久无码国产精品性波多| 日韩视频一二区| 欧美激情偷拍自拍| 亚洲欧美日韩视频一区| 全球中文成人在线| 欧美孕妇孕交| 96精品久久久久中文字幕| 日韩免费观看高清完整版在线观看| 国产精品麻豆视频| 在线观看成人av| 国产无套粉嫩白浆内谢的出处| 亚洲成av人片在线观看| 国产探花一区二区| 国产成人av免费| 欧洲在线一区|