Rumah > hujung hadapan web > tutorial js > Seret & Lepas Imej dengan Pratonton menggunakan Outlet Rangsangan

Seret & Lepas Imej dengan Pratonton menggunakan Outlet Rangsangan

Susan Sarandon
Lepaskan: 2024-09-27 06:22:03
asal
306 orang telah melayarinya

Drag & Drop Images with Preview using Stimulus Outlets

Artikel ini pada asalnya diterbitkan di Rails Designer


Dalam artikel sebelumnya saya meneroka cara untuk melihat imej sebelum memuat naik dengan Rangsangan.

Saya tahu mahu melanjutkan fungsinya dengan menambahkan seret & lepas. Sepanjang perjalanan saya juga menggunakan saluran Stimulus untuk mengikat kedua-dua fungsi bersama-sama. Mempamerkan penggunaan lebih maju bagi pengawal Rangsangan kecil.

Saya menganggap anda telah melalui semua langkah artikel yang disebut sebelum ini.

Mari kita mulakan dengan HTML. Ia menggunakan HTML lain dengan hanya menambah beberapa atribut.

<div data-controller="image-preview dropzone" data-action="dragover->dropzone#dragOver dragleave->dropzone#dragLeave drop->dropzone#drop">
  <img data-image-preview-target="canvas" hidden class="object-cover size-48">

  <input type="file" accept="image/*" data-image-preview-target="source" data-dropzone-target="input" data-action="image-preview#show" hidden>
</div>
Salin selepas log masuk

Mari kita cipta dropzone_controller.js.

import { Controller } from "@hotwired/stimulus";

export default class extends Controller {
  static targets = ["input"];

  dragOver(event) {
    event.preventDefault();
  }

  dragLeave(event) {
    event.preventDefault();
  }

  drop(event) {
    event.preventDefault();

    this.#updateInputField(event.dataTransfer.files[0]);
  }
}
Salin selepas log masuk

Semua kaedah ini adalah menghalang peristiwa lalai apabila tindakan ini digunakan. Fungsi drop() juga memanggil fungsi peribadi ini.#updateInputField(). Jom tambah.

export default class extends Controller {
  // …

  // private
  #updateInputField(file) {
    const dataTransfer = new DataTransfer();

    dataTransfer.items.add(file);

    this.inputTarget.files = dataTransfer.files;
  }
  // …
}
Salin selepas log masuk

Ini akan menyuntik imej yang digugurkan ke dalam medan inputTarget. Dan seperti itu anda boleh menyeret dan melepaskan imej ke elemen. ?

Pratonton imej dengan cawangan

Ada bahagian penting yang hilang walaupun... imej tidak ditunjukkan yang kelihatan seperti pepijat. Nasib baik dengan image_preview_controller.js sudah selesai. Ini adalah latihan mudah.

Mula-mula tweak HTML dengan menambahkan atribut berikut:

<div data-controller="image-preview dropzone" data-dropzone-image-preview-outlet="#image-preview" data-action="dragover->dropzone#dragOver dragleave->dropzone#dragLeave drop->dropzone#drop" id="image-preview>
  <img data-image-preview-target="canvas" hidden class="object-cover size-48">

  <input type="file" accept="image/*" data-image-preview-target="source" data-dropzone-target="input" data-action="image-preview#show" hidden>
</div>
Salin selepas log masuk

Ditambah:

  • data-dropzone-image-preview-outlet="#image-preview";
  • id="image-preview".

Kini dua baris diperlukan dalam dropzone_controller.js.

export default class extends Controller {
  static outlets = ["image-preview"];
  // …

  drop(event) {
    // …

    this.imagePreviewOutlet.show();

    // …
  }

  // …
}
Salin selepas log masuk

Kini apabila anda menggugurkan imej ia menyalakan fungsi show() pada image_preview_controller.js. ?

Saya suka menggunakan pengawal Rangsangan kecil seperti ini yang berfungsi dengan baik bersama-sama.


Rails Designer mempunyai pengawal Rangsangan ini dibungkus dengan beberapa tambahan tambahan. Dapatkan salinan anda hari ini.

Atas ialah kandungan terperinci Seret & Lepas Imej dengan Pratonton menggunakan Outlet Rangsangan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan