Das Vue-Cropper-Plugin realisiert die Kapselung der Bildaufnahme- und Upload-Komponente

Das Vue-Cropper-Plugin realisiert die Kapselung der Bildaufnahme- und Upload-Komponente

Der spezifische Code zum Einkapseln der Bildaufnahme- und Upload-Komponente basierend auf dem Vue-Cropper-Plugin wird zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Bedarfsszenario:

Die Backend-Entwicklung erfordert das Hochladen von Bildern und deren Zuschneiden in den entsprechenden Proportionen. Diese Komponentenentwicklung verwendet die Ant Design Vue-Komponentenbibliothek mit dem Vue-Cropper-Plugin zur Kapselung

Die Umsetzung erfolgt wie folgt

html

<Vorlage>
  <div>
    <a-hochladen
      Name = "Avatar"
      Listentyp = "Bildkarte"
      Klasse = "Avatar-Uploader"
      :show-upload-list="false"
      :custom-request="BenutzerdefinierteAnfrage"
      :before-upload="vor dem Hochladen"
      :style="`Breite: ${width}; Höhe: ${height};`"
    >
      <Bild
        v-if="Bild-URL && !wird geladen"
        :src="Bild-URL"
        alt="Avatar"
        :style="`Breite: ${width}; Höhe: ${height};`"
      />
      <div v-sonst>
        <a-icon :type="wird geladen ? 'wird geladen' : 'plus'" />
        <div class="ant-upload-text">Bilder hochladen</div>
      </div>
    </a-upload>
    <a-modal
      v-Modell = "imageCut.isShowModal"
      Titel="Bildaufnahme"
      Breite="400px"
      @ok="fertig"
      @cancel="Bild ausschneiden.schließen"
    >
      <div Klasse="cropper-content" v-if="imageCut.isShowModal">
        <div Klasse="cropper" Stil="text-align:center">
          <vueCropper
            ref="Beschneider"
            :img="imageCut.imgFile"
            :outputSize="Ausgabegröße"
            :outputType="Ausgabetyp"
            :info="Informationen"
            :voll="voll"
            :canMove="kannBewegen"
            :kannBoxVerschieben="kannBoxVerschieben"
            :original="Original"
            :autoCrop="automatisch zuschneiden"
            :fixiert="behoben"
            :festeNummer="festeNummer"
            :centerBox="Mittelbox"
            :infoTrue="infoTrue"
            :festeBox="festeBox"
          ></vueCropper>
        </div>
      </div>
    </a-modal>
  </div>
</Vorlage>

js

<Skript>
importiere { uploadImage } von '@/api/common'
importiere { VueCropper } von "vue-cropper";
Standard exportieren {
  Name: 'BildUpload',
  Komponenten: { VueCropper },
  Daten() {
    zurückkehren {
      wird geladen: falsch,
      Bildschnitt: {
        isShowModal: false,
        imgDatei: '',
        init: imgFile => {
          this.imageCut.imgFile = Bilddatei
          this.imageCut.isShowModal = true
        },
        schließen: () => {
          this.imageCut.imgFile = ''
          this.imageCut.isShowModal = false
        }
      }
    }
  },
  Requisiten: {
    imageUrl: Zeichenfolge,
    Breite: {
      Typ: Zeichenfolge,
      Standard: „100px“
    },
    Höhe:
      Typ: Zeichenfolge,
      Standard: „100px“
    },
    kann ausschneiden: {
      Typ: Boolean,
      Standard: false
    },
    Info:
      Typ: Boolean,
      Standard: false
    }, // Informationen zur Größe des Zuschneidefelds outputSize: {
      Typ: Nummer,
      Standard: 0,8
    }, // Die Qualität des zugeschnittenen Bildes outputType: {
      Typ: Zeichenfolge,
      Standard: „jpeg“
    }, // Zuschneiden zum Erzeugen des Bildformats canScale: {
      Typ: Boolean,
      Standard: true
    }, // Ob das Bild das Zoomen mit dem Scrollrad zulässt autoCrop: {
      Typ: Boolean,
      Standard: true
    }, // Ob standardmäßig ein Screenshot-Rahmen generiert werden soll // autoCropWidth: 300, // Die Standardbreite des Screenshot-Rahmens // autoCropHeight: 200, // Die Standardhöhe des Screenshot-Rahmens fixedBox: {
      Typ: Boolean,
      Standard: false
    }, // Behoben: Screenshot-Framegröße kann nicht geändert werden behoben: {
      Typ: Boolean,
      Standard: true
    }, // Ob das feste Verhältnis von Breite und Höhe des Screenshot-Rahmens aktiviert werden soll fixedNumber: {
      Typ: Array,
      Standard: () => [1, 1]
    }, // Das Seitenverhältnis des Screenshot-Frames full: {
      Typ: Boolean,
      Standard: true
    }, // Ob der Screenshot in der Originalproportion ausgegeben werden soll canMove: {
      Typ: Boolean,
      Standard: false
    },
    kannBox verschieben: {
      Typ: Boolean,
      Standard: true
    }, // Kann der Screenshot-Rahmen ins Original gezogen werden: {
      Typ: Boolean,
      Standard: false
    }, // Rendere das hochgeladene Bild entsprechend dem Originalverhältnis centerBox: {
      Typ: Boolean,
      Standard: true
    }, // Ist das Screenshot-Feld auf das Bild beschränkt? infoTrue: {
      Typ: Boolean,
      Standard: true
    } // true, um die tatsächliche Breite und Höhe des Ausgabebildes anzuzeigen. false, um die Breite und Höhe des Screenshot-Rahmens anzuzeigen. },
  Methoden: {
    vorUpload(Datei) {
      const isJpgOrPng = Dateityp === 'Bild/jpeg' || Dateityp === 'Bild/png'
      wenn (!istJpgOrPng) {
        this.$message.error('Bitte laden Sie eine JPG- oder PNG-Datei hoch!')
      }
      const isLt2M = Dateigröße / 1024 / 1024 < 2
      wenn (!isLt2M) {
        this.$message.error('Bitte laden Sie eine Datei unter 2 MB hoch!')
      }
      Rückgabewert ist JpgOrPng und isLt2M
    },
    benutzerdefinierteAnfrage(Datei) {
      wenn (dies.kannSchnitt) {
        this.readFile(Datei.Datei)
      } anders {
        dies.laden = wahr
        const formData = new FormData()
        formData.append('fileIdcard', datei.datei)
        Bild hochladen(formData).then(res => {
          dies.laden = falsch
          dies.$emit('uploadSuccess', res.ossUrl)
        })
      }
    },
    leseDatei(Datei) {
      var reader = neuer FileReader()
      reader.readAsDataURL(Datei)
      reader.onload = () => {
        dies.imageCut.init(reader.result)
      }
    },
    beenden() {
      dies.$refs.cropper.getCropBlob(data => {
        dies.laden = wahr
        // Auf Alibaba Cloud-Server hochladen const formData = new FormData()
        formData.append('fileIdcard', Daten)
        Bild hochladen(formData).then(res => {
          dies.imageCut.close()
          dies.laden = falsch
          dies.$emit('uploadSuccess', res.ossUrl)
        })
      })
    }
  }
}
</Skript>

CSS

<style lang="less">
.avatar-uploader > .ant-upload {
  Breite: 100 %;
  Höhe: 100%;
}
.ant-upload-select-picture-card ich {
  Schriftgröße: 32px;
  Farbe: #999;
}

.ant-upload-Bildkarte auswählen .ant-upload-text {
  Rand oben: 8px;
  Farbe: #666;
}
.cropper-Inhalt {
  .cropper {
    Breite: automatisch;
    Höhe: 400px;
  }
}
</Stil>

Komponentenverwendung und Anweisungen

<Bild-Upload
        :imageUrl="form.diagramUrl"
        @uploadSuccess="UploadErfolgreich"
        Breite="160px"
        Höhe="90px"
        :kann-bearbeiten="kannSchneiden"
        :feste Zahl="[16,9]"
      />

Beim Aufrufen der Komponente müssen Sie das Attribut canEdit übergeben, um anzugeben, ob die Komponente die Zuschneidefunktion startet, nachdem das Bild ausgewählt wurde. Der Standardwert ist, das Zuschneiden zu deaktivieren. Wenn das Zuschneiden erforderlich ist, können Sie das Attribut fixedNumber übergeben, um das Seitenverhältnis des Zuschneidefelds zu definieren.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue implementiert Throttle oder Debounce als Komponente oder Plug-In
  • Vue verwendet das zTree-Plugin, um ein Beispiel für die Operation einer Baumkomponente zu kapseln
  • Beispiel einer benutzerdefinierten Paging-Plugin-Komponente in Vue
  • Implementierung der responsiven, adaptiven Karussell-Komponenten-Plug-In-Funktion VueSliderShow basierend auf Vue2x
  • Verwendung benutzerdefinierter globaler Vue-Komponenten (benutzerdefinierte Plug-Ins)
  • Das Bootstrap-Select-Plugin ist als Vue2.0-Komponente gekapselt
  • Zusammenfassung der Unterschiede und Verwendung von Plugins und Komponenten in Vue

<<:  Lösung für das Problem, dass Docker-Container nicht gestoppt oder beendet werden können

>>:  Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Artikel empfehlen

Lösen Sie das MySQL-Login-1045-Problem unter CentOS

Da die gesamte Anwendung unter CentOS bereitgeste...

Die Vollversion des gängigen Linux-Tools vi/vim

Warum Vim lernen? Linux verfügt über eine große A...

So verwenden Sie die Clipboard-API in JS

Inhaltsverzeichnis 1. Document.execCommand()-Meth...

Analyse der Ursache des Docker-Fehlers Beendet (1) vor 4 Minuten

Docker-Fehler 1. Überprüfen Sie die Ursache Docke...

jQuery-Plugin zum Erreichen eines Bildvergleichs

In diesem Artikelbeispiel wird der spezifische Co...

So konfigurieren Sie die MySQL Master-Slave-Replikation unter Windows

Die MySQL Master-Slave-Replikation ermöglicht die...

VMware Workstation ist nicht mit Device/Credential Guard kompatibel

Beim Installieren einer virtuellen Maschine wird ...

Vue + Openlayer realisiert den Drag- und Rotationsverformungseffekt von Grafiken

Inhaltsverzeichnis Vorwort Ressourcen zum Thema E...

12 Gesetze des Webdesigns für sauberen Code [Grafik]

Schöner Code ist die Grundlage einer schönen Websi...

So erreichen Sie die maximale Anzahl von Verbindungen in MySQL

Inhaltsverzeichnis Was ist der Grund für den plöt...

Detaillierte Analyse der MySQL-Sperrblockierung

Bei der täglichen Wartung werden Threads häufig b...