Rumah hujung hadapan web tutorial js 浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧

浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧

May 16, 2016 pm 05:10 PM
Pusingan gambar Pratonton gambar

工作中遇到的业务场景,和同事一起研究了下,主要是为了兼容IE版本

其实就是一些琐碎的知识点在网上搜集下解决方式,然后集成了下,主要有以下点:

1. IE input type=file的图片预览要用IE的filter css

    progid:DXImageTransform.Microsoft.AlphaImageLoader

   chrome/firefox则用File api的file reader

2. 图片旋转,IE用progid:DXImageTransform.Microsoft.Matrix的filter(filter可以组合用,用空格隔开)

   chrome/firefox用canvas

3. 上传图片,我用的都是不可见的iframe 里的form动态的添加input[type=file]去实现。chrome/firefox可以用xhr,但我懒得去修改了

4. 其中为了实现上传图片不刷新本页面,又能反复选择文件,所以还用一个iframe专门维护一个input[type=file]的列表,比较偷巧。

浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧

可以参考下代码,主要是一个主html,然后两个iframe的html,上传的服务端返回的数据为上传成功的file name,用于删除预览图。

复制代码 代码如下:

// 上传回调
        // resultList -> ['file1', 'file2'] 为上传成功的file name
        var uploadCallback = function(resultList){
            console.log(JSON.stringify(resultList));

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

        $(function(){
            // 保存图片旋转的角度,以便提交给服务端处理
            var rotateAng = {};
            // 用于命名后缀的序号
            var cc = 0;

            // 如果是chrome/ff,需要用file api去生成img
            var genImgTpl = function(input, index){
                return '浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧';
            };

            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 = '

' + genImgTpl(_input, index) +
                    '' +
                    '浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧' +
                    '
';
                $('#imgDiv').append(tpl);

                readImgFromInput(_input, index);
            };
            var addAnother = function(){
                $('#uploadBtn').before('');
            };

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

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

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

            $('#imgDiv span.turn-right').live('click', function(){
                // 上次旋转的角度
                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);
            });

            // 表单提交时候根据checkbox,删除未choose的input[type=file]
            $('#uploadBtn').click(function(){
                var choosedNum = $('#imgDiv input:checkbox').filter(':checked').length;
                if(!choosedNum){
                    alert('请选择上传文件!');
                    return false;
                }

                // 选中的序号数组
                var choosedIndexList = $('#imgDiv input:checkbox').filter(':checked').map(function(){
                    return this.value;
                }).get();

                // 两个iframe,一个用于保存选择的input[type=file]
                // 一个用于form upload
                var uploadIframe = $('#upload')[0].contentWindow;
                var chooseIframe = $('#choose')[0].contentWindow;

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

                    // 旋转度数
                    var ang = rotateAng[index] || 0;
                    if(ang % 360 != 0){
                        var tplInput = '';
                        uploadIframe.$('#uploadForm').append(tplInput);
                    }
                }

                uploadIframe.doUpload();

                return false;
            });
        });


IE7、8、9和chrome中测试没有问题
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan fungsi pratonton imej dalam uniapp Bagaimana untuk melaksanakan fungsi pratonton imej dalam uniapp Jul 04, 2023 am 10:36 AM

Cara melaksanakan fungsi pratonton imej dalam apl uni Pengenalan: Dalam pembangunan aplikasi mudah alih, pratonton imej ialah fungsi yang biasa digunakan. Dalam apl uni, kami boleh melaksanakan fungsi pratonton imej dengan menggunakan pemalam uni-ui atau komponen tersuai. Artikel ini akan memperkenalkan cara melaksanakan fungsi pratonton imej dalam apl uni, dengan contoh kod. 1. Gunakan pemalam uni-ui untuk melaksanakan fungsi pratonton imej uni-ui ialah perpustakaan komponen berdasarkan Vue.js yang dibangunkan oleh DCloud, yang menyediakan kumpulan UI yang kaya.

Cara mengendalikan pratonton imej dan isu zum dalam komponen Vue Cara mengendalikan pratonton imej dan isu zum dalam komponen Vue Oct 09, 2023 pm 09:34 PM

Cara mengendalikan pratonton imej dan isu zum dalam komponen Vue memerlukan contoh kod khusus Pengenalan: Dalam aplikasi web moden, pratonton imej dan zum adalah keperluan yang sangat biasa. Sebagai rangka kerja bahagian hadapan yang popular, Vue membekalkan kami dengan banyak alatan berkuasa untuk menangani masalah ini. Artikel ini akan memperkenalkan cara mengendalikan pratonton imej dan zum masuk komponen Vue, serta memberikan contoh kod khusus. 1. Pratonton imej: Pratonton imej bermakna apabila pengguna mengklik atau menuding pada imej, ia boleh memaparkan versi imej yang besar atau membesarkannya dalam kawasan tertentu.

Bagaimana untuk menggunakan JavaScript untuk mencapai kesan putaran imej? Bagaimana untuk menggunakan JavaScript untuk mencapai kesan putaran imej? Oct 20, 2023 pm 07:09 PM

Bagaimana untuk menggunakan JavaScript untuk mencapai kesan putaran imej? Dalam pembangunan web, kami sering menghadapi senario di mana kesan putaran imej perlu dicapai, seperti memaparkan imej putaran 360° produk, mencapai kesan karusel imej, dsb. JavaScript ialah bahasa skrip yang berkuasa yang boleh mencapai kesan putaran imej ini dengan mudah. Berikut akan memperkenalkan kaedah untuk mencapai kesan putaran imej berdasarkan JavaScript dan memberikan contoh kod khusus. Pertama, kami mencipta struktur HTML yang mudah

Gunakan uniapp untuk melaksanakan fungsi penggiliran imej Gunakan uniapp untuk melaksanakan fungsi penggiliran imej Nov 21, 2023 am 11:58 AM

Menggunakan uniapp untuk melaksanakan fungsi putaran imej Dalam pembangunan aplikasi mudah alih, kita sering menghadapi senario di mana imej perlu diputar Contohnya, sudut perlu dilaraskan selepas mengambil foto, atau kesan yang serupa dengan putaran kamera selepas mengambil gambar. foto tercapai. Artikel ini akan memperkenalkan cara menggunakan rangka kerja uniapp untuk melaksanakan fungsi penggiliran imej dan memberikan contoh kod khusus. uniapp ialah rangka kerja pembangunan merentas platform berdasarkan Vue.js, yang boleh membangunkan dan menerbitkan aplikasi untuk iOS, Android, H5 dan platform lain secara serentak. Dilaksanakan dalam uniapp

Laksanakan kesan putaran imej dalam applet WeChat Laksanakan kesan putaran imej dalam applet WeChat Nov 21, 2023 am 08:26 AM

Untuk melaksanakan kesan putaran imej dalam Program Mini WeChat, contoh kod khusus diperlukan Program Mini WeChat ialah aplikasi ringan yang menyediakan pengguna dengan fungsi yang kaya dan pengalaman pengguna yang baik. Dalam program mini, pembangun boleh menggunakan pelbagai komponen dan API untuk mencapai pelbagai kesan. Antaranya, kesan putaran gambar merupakan kesan animasi biasa yang boleh menambah minat dan kesan visual pada program mini. Untuk mencapai kesan putaran imej dalam program mini WeChat, anda perlu menggunakan API animasi yang disediakan oleh program mini. Berikut ialah contoh kod khusus yang menunjukkan cara untuk

Bagaimana untuk merealisasikan putaran imej menggunakan perpustakaan PHP dan GD Bagaimana untuk merealisasikan putaran imej menggunakan perpustakaan PHP dan GD Jul 12, 2023 am 11:52 AM

Cara melaksanakan putaran imej menggunakan perpustakaan PHP dan GD Putaran imej ialah keperluan pemprosesan imej biasa Dengan memutar imej, anda boleh mencapai beberapa kesan khas atau memenuhi keperluan pengguna. Dalam PHP, anda boleh menggunakan perpustakaan GD untuk melaksanakan fungsi putaran imej. Artikel ini akan memperkenalkan cara menggunakan PHP dan perpustakaan GD untuk melaksanakan penggiliran imej, dengan contoh kod. Mula-mula, pastikan persekitaran PHP anda mempunyai sambungan perpustakaan GD dipasang. Masukkan php-m pada baris arahan untuk menyemak sama ada terdapat modul gd Jika tidak, anda perlu memasangnya terlebih dahulu. Berikut adalah ringkasnya

Bagaimana untuk melaksanakan fungsi menyemak imbas imej dan pratonton imej dalam uniapp Bagaimana untuk melaksanakan fungsi menyemak imbas imej dan pratonton imej dalam uniapp Oct 20, 2023 pm 03:57 PM

Bagaimana untuk melaksanakan penyemakan imbas imej dan fungsi pratonton imej dalam uniapp? Dalam uniapp, kita boleh menggunakan perpustakaan komponen uni-ui untuk melaksanakan penyemakan imbas imej dan fungsi pratonton imej. uni-ui ialah perpustakaan komponen berdasarkan Vue.js yang dibangunkan oleh DCloud, yang menyediakan set komponen UI yang kaya, termasuk penyemakan imbas imej dan komponen pratonton imej. Pertama, kita perlu memperkenalkan perpustakaan komponen uni-ui ke dalam projek. Buka fail pages.json projek dan tambah "un" dalam medan "easycom".

Petua dan amalan terbaik untuk melaksanakan fungsi pratonton imej dalam Vue Petua dan amalan terbaik untuk melaksanakan fungsi pratonton imej dalam Vue Jun 25, 2023 pm 09:21 PM

Vue ialah rangka kerja JavaScript yang popular untuk membina aplikasi satu halaman (SPA). Pratonton imej ialah ciri biasa dalam aplikasi web, dan terdapat banyak cara untuk melaksanakan pratonton imej dalam Vue. Artikel ini akan memperkenalkan secara terperinci teknik dan amalan terbaik untuk melaksanakan fungsi pratonton imej dalam Vue. 1. Gunakan pemalam Vue Pemalam Vue menyediakan cara mudah untuk melaksanakan pratonton imej. Pemalam Vue boleh didaftarkan secara global supaya ia boleh digunakan sepanjang aplikasi. Berikut ialah dua pemalam Vue yang biasa digunakan:

See all articles