亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

HTML5連續(xù)上傳圖片

original 2016-11-18 10:24:21 961
abstrait:/* by 的雨 time:2016/11/17 */ function update_object() {     //這是在實例化的時候,同時調(diào)用int方法     this.int.apply(this,arguments); } //這是原型鏈 == 一個對象 updat
/*
by 的雨
time:2016/11/17
*/
function update_object()
{
    //這是在實例化的時候,同時調(diào)用int方法
    this.int.apply(this,arguments);
}
//這是原型鏈 == 一個對象
update_object.prototype={
    int:function(options)
    {
        //這是接收從調(diào)用的時候傳過來參數(shù)
        this.CC=options.CC;
        this.tishi=options.tishi;
        this.BB=options.BB;
        this.show=options.show;
        this.myfile=options.myfile;
        this.array=[];
        var that=this;
        this.btn=options.btn;
        this.myfile.onchange=function()   //input發(fā)生改變的時候觸發(fā)(onchange事件)
        {
            //第一步驟,這個步驟是找到file,即上傳的文件
            var files = this.files;
            /*
            concat() 方法用于連接兩個或多個數(shù)組。 把that.filter(files)添加到that.array,這樣that.array就會不斷的保存file數(shù)組
            該方法不會改變現(xiàn)有的數(shù)組,而僅僅會返回被連接數(shù)組的一個副本。
            */
            that.array=that.array.concat(that.filter(files));
            that.Index();
            return this;
        }
        //這是點擊上傳的步驟
        this.btn.onclick=function(e)
        {
            that.array;
            var e=e||event;
            e.preventDefault();
            //點擊的同時調(diào)用上傳的方法
            that.upload();
        }
         
    },
    //第二步驟,這是過濾file的步驟,這一步在concat之前就調(diào)用
    filter: function(files) {
        var arrFiles=[];
        for (var i = 0, file; file = files[i]; i++) {
            if (file.type.indexOf("image") == 0) {
                //if (file.size >= 512000) {
                ////    alert('您這張"'+ file.name +'"圖片大小過大,應(yīng)小于500k'); 
                //} else {
                    arrFiles.push(file);   
                //}        
            } else {
                alert('文件"' + file.name + '"不是圖片。');   
            }
        }
        return arrFiles    ;
    },
    //第三步驟,這是為每個file添加索引,在concat連接之后調(diào)用,把之前的this.array的內(nèi)容改變了
    Index: function() {
         
        for (var i = 0, file; file = this.array[i]; i++) {
            //增加唯一索引值
            file.index = i;
        }
        //這里的this.array已經(jīng)有索引
        this.onSelect(this.array);
        return this;
    },
    //第四步驟,是生成img預(yù)覽和刪除預(yù)覽
    onSelect: function(files) {
        var that=this;
        var html = '', i = 0;
         
        //動態(tài)創(chuàng)建img和li
        var show1 = function() 
        {
             
            file = files[i];
             
            if (file){
                //var reader = new FileReader()
                var URL=window.URL.createObjectURL(file)
                //reader.onload = function(e) 
                //{
                    html+='<li ><div id="jindu">上傳成功</div><img id="pic_' + i + '" src='+URL+'><span id="name_'+ i +'" class="upload_append_list">'+file.name+'</span><a href="#" id="del" title="刪除" index="'+ i +'">×</a></li>';
                    //console.log(file);
                    i++;
                    show1();
                    that.show.style.display='block';
                    that.show.innerHTML=html;  
                     
                //}
                //reader.readAsDataURL(file);e.target.result
            } 
        };
        show1();
         
        //這是刪除預(yù)覽,同時把已經(jīng)刪除的file的索引傳到下一個數(shù)組
        var del=function()
        {
            if (this.show.hasChildNodes()) {
            var Li=this.show.getElementsByTagName('li');
            var length=this.show.childNodes.length;
            for(var i=0;i<length;i++)
            {
                 
                Li[i].onmouseover=function()
                {
                    this.lastChild.style.display='block';
                    this.lastChild.onclick=function()
                    {
                        this.parentNode.parentNode.removeChild(this.parentNode);
                        var a=this.getAttribute("index"); //這一步找到索引,因為file和a索引都是一樣,找到a等于找到file
                        that.picdelete(files[a]);  //這部分已經(jīng)是刪除的file,傳遞到下一個數(shù)組
                    }
                }  
                 
                Li[i].onmouseout=aa=function()
            {
                 
                this.lastChild.style.display='none';
                 
            }  
            }  
            }  
        }
        del();
    },
    //第五步驟,這是刪除選擇的file的步驟
    picdelete:function(a)
    {
         
        var arr=[];
        for(var i=0,file;file=this.array[i];i++)
        {
            if(a!==file) //遍歷this.array找到和a相同的,就不要把它保存到數(shù)組
            {
                arr.push(file);
            }
        }
        this.array=arr;  //把最后的file對象內(nèi)容重新賦值給this.array(已不是剛開始的那個值)
         
    },
    //第六步驟,這是上傳的
    upload:function()
    {
        //this.array是對象,不是數(shù)組
        var that=this; 
        var formData = new FormData();  //這是HTML5的上傳,能夠上傳圖片和文字
        var aaaa
        //這一步,把所有的this.array都轉(zhuǎn)換為二維數(shù)組,例file1,file2,file3,方便最后一步全部上傳,不用每循環(huán)一次就上傳一次
        for (var i = 0, file; file = this.array[i]; i++) {
            formData.append("file"+i,file);  //要加i否則就會被覆蓋,只有最后一個值
            //aaaa=i;console.log(i);
        }
         
            aaaa=aaaa+1;
             var xhr = new XMLHttpRequest();
             //這這部分是顯示上傳進度條的
            xhr.upload.onprogress=function(evt)
            {
                var lod=evt.loaded;   //已經(jīng)上傳的大小
                var to=evt.total;   //總的大小
                var per=Math.floor(((lod/to))*100)+"%";
                that.tishi.style.display='block';
                that.tishi.innerHTML='你上傳了'+(aaaa*Math.floor(((lod/to))))+'張照片;'+'已經(jīng)上傳'+per;
                if(per=='100%')
                {
                    var Li=that.show.childNodes;
                    for(var i=0;i<Li.length;i++)
                    {
                        Li[i].firstChild.style.display='block';
                        Li[i].onmouseover=function()
                        {
                            this.lastChild.style.display='none';   
                        }
                    }
                }
            }
            //接收后臺返回來的數(shù)據(jù)
            xhr.onreadystatechange = function(){
            if(xhr.readyState==4&&xhr.status==200){
               console.log(xhr.responseText)
            }
              }
            xhr.open('POST','check.php',true);
            //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send(formData);
            //傳過去的值,用$_FILES接受,相當(dāng)于直接表單提交
    /*
    步驟
    1,先找到file文件,過濾后用新的數(shù)組連接成一個數(shù)組
    2,為每個file添加一個i值。就是索引;
    3,從得到索引的file遍歷處理,動態(tài)創(chuàng)建img
    4,刪除事件,把選擇刪除的file傳遞到下一級
    5,重新組合file組合,重新遍歷,不保存上級帶有刪除的file
    6,最后得到的是確定要上傳的file組合,一般和開始的數(shù)組不一樣
     
    */
    }
}

 這是調(diào)用的

<script>
window.onload=function()
{
    var CC=document.getElementById('cc');
    var BB=document.getElementById('bb');
    var tishi=document.getElementById('tishi');
    var show=document.getElementById('show');
    var myfile=document.getElementById('myfile');
    var btn=document.getElementById('submit');
    var update=new update_object(
    {
        CC:CC,
        BB:BB,
        tishi:tishi,
        show:show,
        myfile:myfile,
        btn:btn
    }
    );
     
}
</script>
<form action="check.php"  method="post" enctype="multipart/form-data">
<div id="aa">
 
    <div id=bb>
    <label>
        <div id="cc" title="上傳圖片">上傳圖片</div>
        <input type="file" id="myfile" name='name[]' accept="image/jpeg,image/jpg,image/png,image/gif" style=" display:none"  multiple='true'> 
     </label>
    </div> 
    <div id="size">
    <div  id="tishi">
    </div>
    <label>
    <div id="begin">開始上傳</div>
    <input id='submit' type="submit" style="display:none" value="">
    </label>
    </div>
    <ul id="show">
    </ul>
</div>
<input id='submit' type="submit" value="提交">
</form>

個人是新手,所以寫的代碼不規(guī)范,還請多多包涵。我也是在網(wǎng)上找了很久,找不到全是純JavaScript寫的,所以想把這篇,讓新手學(xué)習(xí)。

Notes de version

Entrées populaires