麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

jQuery實現input[type=file]多圖預覽上傳刪除等功能

2019-11-19 11:05:09
字體:
來源:轉載
供稿:網友

下面我們了解一下,多圖上傳時,怎么實現預覽、上傳、刪除等功能。下圖是功能實現的預覽效果,雖然樣式有點丑,不過功能還是實現了。話不多說,直接看代碼會更直觀一些。

在這里插入圖片描述

首先定義一下基本格式,樣式代碼自行腦補:

<body> <div class="upload-header"> <input id="upload" type="file" accept="image/*" multiple="multiple"> <button class="btn">點擊上傳</button> </div> <div class="img-box"> <!-- 存放預覽圖片 --> </div></body>

接著定義看一下具體的js實現代碼,我是基于JQ做的開發,方便DOM的操作。

1. 預覽功能的實現

這里監聽input[type=file]的change事件,在回調函數中,取到暫存區的文件e.target.files,通過遍歷files 文件屬性,使用FileReader 函數讀取文件的值,然后使用append方法把圖片放入指定盒子中。備注::FileReader是一種異步文件讀取機制,結合input:file可以很方便的讀取本地文件。

imgPreview: function () { var that = this; $('.upload-header').on('change', '#upload', function(e) {  var files = e.target.files;  if (files.length > 0) {  for (var i = 0; i < files.length; i++) {   var reader = new FileReader();   reader.onload = function () {   var text = `    <div class="img-list">    <img src="${this.result}" alt="">    <div class="del-img">刪除</div>    </div>   `   $('.img-box').append(text);   };   reader.readAsDataURL(files[i]);   that.filesList.push(files[i]);  };  }; }) }

2. 圖片刪除功能

這里是使用on方法對預覽的圖片添加點擊事件,這里使用on方法主要是因為on方法對后面添加的dom可以繼續監聽。當需要刪除照片時,直接刪除其圖片的父節點及以下節點就可以了。此時記得把暫存區的文件filesList也要對應刪除。

delImage: function () { var that = this; $('.img-box').on('click', '.del-img', function () {  var delStatus = confirm('確認這張圖片刪除嗎?');  if (delStatus) {  var index = $(this).parent().index();  $(this).parent().remove();  that.filesList.splice(index, 1);  console.log('我刪除啦', index);  }; }); }

2. 圖片批量上傳功能

圖片上傳我定義了兩個方法,第一方法是點擊上傳后,對所有文件進行遍歷,依次調取上傳的方法(因為用的七牛上傳工具,只支持單個文件上傳,所以采取了遍歷的方式)。第二個方法使用了jq的ajax的post上傳方式,使用FormData實例,添加file屬性進行上傳。因為是批量上傳,所以我使用了定義臨時變量flag 的方式來判斷文件是否都上傳完成,當flag的值與filesList的數量一致時,就可以判斷所有上傳完成。使用方法比較low,如果其他好的方法可以留言交流。

clickUpload: function () { var that = this; var filesList = this.filesList; $('.btn').on('click', function() { that.flag = 0; if (filesList.length > 0) {  for (var i = 0; i < filesList.length; i++) {  that.upLoadMethod(filesList[i]);  } }; }) },upLoadMethod: function (file) { var that = this; var formData = new FormData(); formData.append('file', file); $.ajax({  type: "post",  url: 'http://172.16.1.99:8703/file/upload',  data: formData,  mimeType: "multipart/form-data",  dataType: "json",  async: false,  cache: false, //上傳文件不需要緩存  contentType: false, //需設置為false。因為是FormData對象,且已經聲明了屬性enctype="multipart/form-data"  processData: false, //需設置為false。因為data值是FormData對象,不需要對數據做處理  success: function (response) {  that.flag += 1;  if (that.flag === that.filesList.length) {   console.log('我上傳完成了');  };  },  error: function (err) {  console.log('上傳失敗');  } }); },

以下是完整的js代碼,供參考:

<script> function UploadFunction (name) { this.name = name; this.init(); }; UploadFunction.prototype = { // 初始化 init: function () {  this.clickUpload();  this.imgPreview();  this.delImage(); }, flag: 0, filesList: [], // 點擊上傳 clickUpload: function () {  var that = this;  var filesList = this.filesList;  $('.btn').on('click', function() {  that.flag = 0;  if (filesList.length > 0) {   for (var i = 0; i < filesList.length; i++) {   that.upLoadMethod(filesList[i]);   }  };  })  }, imgPreview: function () {  var that = this;  $('.upload-header').on('change', '#upload', function(e) {  var files = e.target.files;  console.log(files);  if (files.length > 0) {   for (var i = 0; i < files.length; i++) {   var reader = new FileReader();   reader.onload = function () {    var text = `    <div class="img-list">     <img src="${this.result}" alt="">     <div class="del-img">刪除</div>    </div>    `    $('.img-box').append(text);   };   reader.readAsDataURL(files[i]);   that.filesList.push(files[i]);   };  };  }) }, upLoadMethod: function (file) {  var that = this;  var formData = new FormData();  formData.append('file', file);  $.ajax({  type: "post",  url: '這里使用上傳的地址/upload',  data: formData,  mimeType: "multipart/form-data",  dataType: "json",  async: false,  cache: false, //上傳文件不需要緩存  contentType: false, //需設置為false。因為是FormData對象,且已經聲明了屬性enctype="multipart/form-data"  processData: false, //需設置為false。因為data值是FormData對象,不需要對數據做處理  success: function (response) {   that.flag += 1;   if (that.flag === that.filesList.length) {   console.log('我上傳完成了');   };  },  error: function (err) {   console.log('上傳失敗');  }  }); }, delImage: function () {  var that = this;  $('.img-box').on('click', '.del-img', function () {  var delStatus = confirm('確認這張圖片刪除嗎?');  if (delStatus) {   var index = $(this).parent().index();   $(this).parent().remove();   that.filesList.splice(index, 1);   console.log('我刪除啦', index);  };  }); } } var UploadFunction = new UploadFunction('小明刪照片');

總結

以上所述是小編給大家介紹的jQuery實現input[type=file]多圖預覽上傳刪除等功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美日韩在线视频一区二区 | 叉逼视频 | 国产高清自拍一区 | 一区二区三级视频 | 成年免费在线视频 | 午夜av男人的天堂 | 久久久一区二区三区四区 | 免费国产网站 | 成人在线观看免费观看 | 欧美成人精品不卡视频在线观看 | 成人免费av在线播放 | 精品一区二区在线播放 | 国产精品久久久久久238 | 亚洲国产精品一区二区精品 | 久久超| 激情综合在线 | 涩涩操 | 久久久久久久一区二区 | 国产91一区 | 日韩一级精品 | 久久久一区二区三区四区 | 宅男噜噜噜66国产免费观看 | 在线成人免费网站 | 久热久操 | 吾色视频 | 美女毛片在线观看 | japanese massage tube | 国产高潮失禁喷水爽到抽搐视频 | 色人阁导航 | 91在线色视频 | 欧美人一级淫片a免费播放 久久久久久久久91 国产99久久久久久免费看 | av免费在线免费观看 | 日韩视频1 | 婷婷久久综合九色综合色多多蜜臀 | 国产午夜免费福利 | 黄色毛片视频在线观看 | 色999中文字幕 | 日本羞羞的午夜电视剧 | 亚洲网站一区 | 久久国产精品区 | av黄色片网站 |