/*
by 的雨
time:2016/11/17
*/
function update_object()
{
//這是在實例化的時候,同時調用int方法
this.int.apply(this,arguments);
}
//這是原型鏈 == 一個對象
update_object.prototype={
int:function(options)
{
//這是接收從調用的時候傳過來參數
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發生改變的時候觸發(onchange事件)
{
//第一步驟,這個步驟是找到file,即上傳的文件
var files = this.files;
/*
concat() 方法用于連接兩個或多個數組。 把that.filter(files)添加到that.array,這樣that.array就會不斷的保存file數組
該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
*/
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();
//點擊的同時調用上傳的方法
that.upload();
}
},
//第二步驟,這是過濾file的步驟,這一步在concat之前就調用
filter: function(files) {
var arrFiles=[];
for (var i = 0, file; file = files[i]; i++) {
if (file.type.indexOf("p_w_picpath") == 0) {
//if (file.size >= 512000) {
//// alert('您這張"'+ file.name +'"圖片大小過大,應小于500k');
//} else {
arrFiles.push(file);
//}
} else {
alert('文件"' + file.name + '"不是圖片。');
}
}
return arrFiles ;
},
//第三步驟,這是為每個file添加索引,在concat連接之后調用,把之前的this.array的內容改變了
Index: function() {
for (var i = 0, file; file = this.array[i]; i++) {
//增加唯一索引值
file.index = i;
}
//這里的this.array已經有索引
this.onSelect(this.array);
return this;
},
//第四步驟,是生成img預覽和刪除預覽
onSelect: function(files) {
var that=this;
var html = '', i = 0;
//動態創建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();
//這是刪除預覽,同時把已經刪除的file的索引傳到下一個數組
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]); //這部分已經是刪除的file,傳遞到下一個數組
}
}
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相同的,就不要把它保存到數組
{
arr.push(file);
}
}
this.array=arr; //把最后的file對象內容重新賦值給this.array(已不是剛開始的那個值)
},
//第六步驟,這是上傳的
upload:function()
{
//this.array是對象,不是數組
var that=this;
var formData = new FormData(); //這是HTML5的上傳,能夠上傳圖片和文字
var aaaa
//這一步,把所有的this.array都轉換為二維數組,例file1,file2,file3,方便最后一步全部上傳,不用每循環一次就上傳一次
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; //已經上傳的大小
var to=evt.total; //總的大小
var per=Math.floor(((lod/to))*100)+"%";
that.tishi.style.display='block';
that.tishi.innerHTML='你上傳了'+(aaaa*Math.floor(((lod/to))))+'張照片;'+'已經上傳'+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';
}
}
}
}
//接收后臺返回來的數據
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接受,相當于直接表單提交
/*
步驟
1,先找到file文件,過濾后用新的數組連接成一個數組
2,為每個file添加一個i值。就是索引;
3,從得到索引的file遍歷處理,動態創建img
4,刪除事件,把選擇刪除的file傳遞到下一級
5,重新組合file組合,重新遍歷,不保存上級帶有刪除的file
6,最后得到的是確定要上傳的file組合,一般和開始的數組不一樣
*/
}
}這是調用的
<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="p_w_picpath/jpeg,p_w_picpath/jpg,p_w_picpath/png,p_w_picpath/gif" multiple='true'> </label> </div> <div id="size"> <div id="tishi"> </div> <label> <div id="begin">開始上傳</div> <input id='submit' type="submit" value=""> </label> </div> <ul id="show"> </ul> </div> <input id='submit' type="submit" value="提交"> </form>
個人是新手,所以寫的代碼不規范,還請多多包涵。我也是在網上找了很久,找不到全是純JavaScript寫的,所以想把這篇,讓新手學習。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。