首頁 web前端 js教程 瀏覽器圖片選擇預覽、旋轉、批次上傳的JS程式碼實作_javascript技巧

瀏覽器圖片選擇預覽、旋轉、批次上傳的JS程式碼實作_javascript技巧

May 16, 2016 pm 05:10 PM
圖片旋轉 圖片預覽

工作中遇到的業務場景,和同事一起研究了下,主要是為了相容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 < 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 = '

' + genImgTpl(_input, index) +
                    '' +
                    '' +
                    '
';
                $('#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 i = 0;

                         var index = choosedIndexList[i];
               .filter('[data-index=' index ']');
                      uploadIframe.$('#uploadForm').append(inputFile);
                    // 旋轉度數
                           if(ang % 360 != 0){

         "ang' index '" value="' ang '" />';

                                  }
                }

                uploadIframe.doUpload();

                return false;
           測驗沒有問題

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在uniapp中實現圖片預覽功能 如何在uniapp中實現圖片預覽功能 Jul 04, 2023 am 10:36 AM

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

Vue元件中如何處理圖片預覽和縮放問題 Vue元件中如何處理圖片預覽和縮放問題 Oct 09, 2023 pm 09:34 PM

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

如何使用 JavaScript 實現圖片旋轉效果? 如何使用 JavaScript 實現圖片旋轉效果? Oct 20, 2023 pm 07:09 PM

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

使用uniapp實現圖片旋轉功能 使用uniapp實現圖片旋轉功能 Nov 21, 2023 am 11:58 AM

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

實現微信小程式中的圖片旋轉效果 實現微信小程式中的圖片旋轉效果 Nov 21, 2023 am 08:26 AM

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

利用PHP和GD庫實現圖片旋轉的方法 利用PHP和GD庫實現圖片旋轉的方法 Jul 12, 2023 am 11:52 AM

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

uniapp中如何實現圖片瀏覽與圖片預覽功能 uniapp中如何實現圖片瀏覽與圖片預覽功能 Oct 20, 2023 pm 03:57 PM

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

Vue 中實現圖片預覽功能的技巧以及最佳實踐 Vue 中實現圖片預覽功能的技巧以及最佳實踐 Jun 25, 2023 pm 09:21 PM

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

See all articles