浏览器图片选择预览、旋转、批量上传的JS代码实现_javascript技巧
工作中遇到的业务场景,和同事一起研究了下,主要是为了兼容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]的列表,比较偷巧。
可以参考下代码,主要是一个主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 '';
};
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 = '
'' +
'

'
$('#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中测试没有问题

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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 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? 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

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

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

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 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".

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:
