瀏覽器圖片選擇預覽、旋轉、批次上傳的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 < resultList.length; 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]
var uploadIframe = $('#upload')[0].contentWindow;
var chooseIframe = $('#choose')[0].contentWindow;
var index = choosedIndexList[i];
.filter('[data-index=' index ']');
uploadIframe.$('#uploadForm').append(inputFile);
// 旋轉度數
if(ang % 360 != 0){
}
}
uploadIframe.doUpload();
return false;
測驗沒有問題

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何在uni-app中實現圖片預覽功能引言:在行動應用程式開發中,圖片預覽是一項常用的功能。在uni-app中,我們可以透過使用uni-ui插件或自訂元件來實現圖片預覽功能。本文將介紹如何在uni-app中實現圖片預覽功能,並附帶程式碼範例。一、使用uni-ui插件實現圖片預覽功能uni-ui是由DCloud開發的一套基於Vue.js的元件庫,提供了豐富的UI組

Vue元件中如何處理圖片預覽和縮放問題,需要具體程式碼範例引言:在現代的Web應用程式中,圖片預覽和縮放是非常常見的需求。 Vue作為一種流行的前端框架,為我們提供了許多強大的工具來處理這些問題。本文將介紹如何在Vue元件中處理圖片預覽和縮放,並提供具體的程式碼範例。一、圖片預覽:圖片預覽是指在使用者點擊或懸停在圖片上時,能夠展示圖片的大版本或在特定區域放大顯示

如何使用JavaScript實現圖片旋轉效果?在網頁開發中,常會遇到需要實現圖片旋轉效果的場景,例如展示產品360°旋轉圖、實現圖片輪播效果等。而JavaScript是一種強大的腳本語言,可以輕鬆實現這種圖片旋轉效果。以下將介紹一種基於JavaScript實現圖片旋轉效果的方法,並提供具體的程式碼範例。首先,我們建立一個簡單的HTML結

使用uniapp實現圖片旋轉功能在行動應用開發中,經常遇到需要對圖片進行旋轉的場景,例如拍攝照片後需要進行調整角度,或實現類似相機拍照後旋轉的效果。本文將介紹如何使用uniapp框架實現圖片旋轉功能,並提供具體的程式碼範例。 uniapp是一個基於Vue.js的跨平台開發框架,可以同時開發和發布iOS、Android、H5等多個平台的應用程式。在uniapp中實現

實現微信小程式中的圖片旋轉效果,需要具體程式碼範例微信小程式是一種輕量級的應用程序,為用戶提供了豐富的功能和良好的用戶體驗。在小程式中,開發者可以利用各種元件和API來實現各種效果。其中,圖片旋轉效果是一種常見的動畫效果,可以為小程式增添趣味性和視覺效果。在微信小程式中實作圖片旋轉效果,需要使用小程式提供的動畫API。以下是一個具體的程式碼範例,展示如何在小程

利用PHP和GD庫實現圖片旋轉的方法圖片旋轉是一個常見的影像處理需求,透過旋轉圖片可以實現一些特殊的效果或滿足使用者需求。在PHP中,可以藉助GD庫來實現圖片旋轉功能。本文將介紹如何使用PHP和GD庫來實現圖片旋轉,並附帶程式碼範例。首先,確保你的PHP環境已經安裝了GD庫拓展。在命令列中輸入php-m,查看是否有gd模組,如果沒有則需要先安裝。下面是一個簡單

uniapp中如何實現圖片瀏覽與圖片預覽功能?在uniapp中,我們可以使用uni-ui元件庫來實現圖片瀏覽和圖片預覽功能。 uni-ui是由DCloud公司開發的一套基於Vue.js的元件庫,提供了豐富的UI元件,包括圖片瀏覽和圖片預覽元件。首先,我們需要在專案中引入uni-ui元件庫。開啟專案的pages.json文件,在"easycom"欄位中新增"un

Vue是一種流行的JavaScript框架,用於建立單頁面應用程式(SPA)。在網路應用程式中,圖片預覽是一個常見的功能,Vue中有許多實作圖片預覽的方法。本文將詳細介紹Vue中實現圖片預覽功能的技巧以及最佳實務。一、使用Vue插件Vue插件提供了一個簡單的方法來實現圖片預覽。 Vue插件可以全域註冊,因此可以在整個應用程式中使用。這裡介紹兩個常用的Vue插
