Heim  >  Artikel  >  Web-Frontend  >  So implementieren Sie das Hochladen und Anzeigen mehrerer Bilder und einzelner Bilder in js

So implementieren Sie das Hochladen und Anzeigen mehrerer Bilder und einzelner Bilder in js

王林
王林nach vorne
2020-04-10 09:24:591829Durchsuche

So implementieren Sie das Hochladen und Anzeigen mehrerer Bilder und einzelner Bilder in js

Vorwort:

Das Hochladen von Bildern wird in Projekten oft in großen Mengen verwendet. Früher habe ich oft einige Materialien aus dem Internet heruntergeladen und direkt verwendet. Doch als die Anzahl der Projekte zunahm, stellte sich heraus, dass unterschiedliche Methoden zum Einsatz kamen, was zu großer Verwirrung führte. Deshalb habe ich mir die Zeit genommen, eine DEMO zu schreiben, um herauszufinden, wie reibungslos das Hochladen von Bildern verläuft und welche Punkte beim Hochladen einzelner und mehrerer Bilder beachtet werden müssen.

Mehrbild-Upload

Mehrbild-Upload, dies ist nur ein Front-End-Anzeigeeffekt. In tatsächlichen Projekten sollte beim Hochladen mehrerer Bilder ein Bild hochgeladen werden eine Zeit Senden Sie dann eine Anfrage an den Hintergrund, und der Hintergrund gibt den IMG-Pfad zurück und zeigt ihn dann an.

(Empfohlenes Tutorial: JS-Tutorial)

Warum muss es zur Anzeige an den Hintergrund übergeben werden?

1. Wenn Sie den Base64-Bildpfad direkt im Vordergrund anzeigen, senden Sie eine Anfrage an den Hintergrund. Wenn in der Benutzeroberfläche ein Fehler auftritt, hat der Benutzer die Illusion, dass das Bild erfolgreich hochgeladen wurde, der Hintergrund jedoch das Bild zu diesem Zeitpunkt nicht empfängt.

2 Dateien werden abgedeckt. Wenn es direkt ohne Ajax-Übermittlung angezeigt wird, wird nur das letzte mit der Formularübermittlung übermittelt.

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>多图上传/单图上传</title>
 <style>
  *{
   margin: 0;
   padding: 0;
  }
  .box{
   width: 1000px;
   height: 120px;
   margin: 0 auto;
   border: 1px solid #ddd;
   margin-top: 20px;
   box-sizing: border-box;
   padding: 10px;
  }
  .upload{
   width: 100px;
   height: 100px;
   float: left;
   position: relative;
   overflow: hidden;
  }
  .upload input{
   position: absolute;
   z-index: 1000;
   top:0;
   left:0;
   width: 100%;
   height: 100%;
   opacity: 0;
  }
  .upload a{
   display: block;
   width: 100%;
  }
  .upload img{
   display: block;
   width: 100%;
   height: 100%;
  }
  .imgList{
   float: left;
   overflow: hidden;
  }
  .imgList .item{
   width: 100px;
   height: 100px;
   margin-right: 20px;
   float: left;
   position: relative;
  }
  .imgList .item img{
   display: block;
   width: 100%;
   height: 100%;
  }
  .imgList .item span{
   position: absolute;
   top: 0;right: 0;
   width: 100%;
   background: red;
   color:#fff;
   height: 20px;
   width: 20px;
   text-align: center;
   border-radius: 50%;
   cursor: pointer;
  }
 </style>
</head>
<body>
 <div>
  <!-- 放图片的位置 -->
  <div id="imgList"></div>
  <!-- 上传按钮 -->
  <div>
   <input type="file" name="file" value="" multiple accept="image/*" onchange="uploadImg(this);">
   <a href="javascript:void(0)" rel="external nofollow" ><img src="z_add.png" alt=""></a>
  </div>
 </div>
 <script>
   function uploadImg(obj){   
    var files = obj.files;//获取上传文件后的fileList
    var imgList = [];//声明空数组用来接收上传完成后的图片
    for(var i = 0; i<files.length;i++){
     var imgUrl = window.URL.createObjectURL(files[i]);//将文件转换成base64 URL格式
     imgList.push(imgUrl);//将url压入到数组中 **如果需要图片统一选择完毕后,点击上传按钮统一提交,那么直接拿这imgList给后台传递即可。**
     // 循环创建img容器用来放置url在页面上显示
     var img = document.createElement(&#39;img&#39;)
     img.setAttribute("src", imgList[i]);
     //删除按钮
     var close = document.createElement(&#39;span&#39;)
     close.innerHTML="x"
     close.className=&#39;close&#39;
     close.setAttribute(&#39;onclick&#39;,"imgRemove(this)")
     //创建放置img的盒子
     var item = document.createElement(&#39;div&#39;);
     item.className=&#39;item&#39;;
     item.append(img)
     item.append(close)
     var box = document.getElementById("imgList");
     box.append(item);
     //ajax向后台发送请求
     
    }
   }
   //删除代码
   function imgRemove(obj){
    obj.parentNode.remove()
   }
   
 </script>
</body>
</html>

Einzelbild-Upload

Entfernen Sie das Mehrfachattribut in der Eingabe und es wird ein Einzelbild-Upload;

<input type="file" name="file" value="" accept="image/*" onchange="uploadImg(this);">

Befolgen Sie die oben genannten Schritte Code Sie können einzelne Bilder direkt hochladen und mehrere Bilder hochladen. Im Folgenden erfahren Sie, worauf Sie beim Hochladen einzelner Bilder und mehrerer Bilder achten müssen.

1 Einzelbild-Uploads können zusammen mit dem Formular übermittelt werden, und Sie können es im Hintergrund durch Eingabe senden ein Namenswert;

2. Mehrere Bild-Uploads können nicht zusammen mit dem Formular übermittelt werden, da die Datei nach jedem Upload nur das neueste Bild behält Durchlaufen Sie das Formular, um eine versteckte Eingabe zu erstellen und in den Hintergrund zurückzugeben. Der Pfad wird so eingestellt, dass er den Val-Wert der Eingabe ändert, und wird schließlich mit dem Formular übermittelt. Dabei ist zu beachten, dass der Namenswert der versteckten Eingabe eingeschrieben wird die Form von [], zum Beispiel: name="img[]". Auf diese Weise kann der Hintergrund beim Absenden des Formulars alle Bilder empfangen.

Der obige Code eignet sich für die Anzeige nach dem Front-End-Klicken auf die Datei zum Hochladen von Bildern. Je nach den Anforderungen des tatsächlichen Projekts können einige spezifische Interaktionen mit dem Hintergrund hinzugefügt werden!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie das Hochladen und Anzeigen mehrerer Bilder und einzelner Bilder in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen