HTML Academy · Pelajaran

Objek dataTransfer

Pindahkan data antara sumber seretan dan sasaran pelepasan

Pelajaran 3 daripada 413 langkah

Objek dataTransfer ialah pelajaran HTML Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran HTML Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus HTML Academy merangkumi sejumlah 4 pelajaran.

Perkara yang Disimpan oleh dataTransfer

Objek dataTransfer dilampirkan pada setiap peristiwa seretan dan merupakan satu-satunya saluran komunikasi antara sumber dengan sasaran. Objek ini membawa data muatan, senarai fail, kesan yang dibenarkan dan kesan pelepasan yang dipilih.

setData dan getData

Sumber menulis muatan bertype menggunakan e.dataTransfer.setData(format, value). Sasaran membacanya menggunakan e.dataTransfer.getData(format). Kedua-dua argumen ialah rentetan; nilai ditukar kepada rentetan sebelum disimpan.

src.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", "hello");
  e.dataTransfer.setData("application/json", JSON.stringify({ id: 42 }));
});

Pelbagai Jenis MIME

Menyimpan muatan yang sama di bawah beberapa jenis menjadikan seretan boleh beroperasi dengan pelbagai aplikasi: "text/plain" berfungsi dalam mana-mana penyunting teks, "text/uri-list" dikenali oleh pelayar sebagai URL dan "text/html" mengekalkan pemformatan dalam pemproses kata. Sasaran memilih perkara yang difahaminya.

Sekatan Membaca di Luar Pelepasan

Demi privasi, pelayar hanya mendedahkan senarai jenis — bukan nilainya — kepada pengendali kemasukan seretan dan seretan ke atas melalui e.dataTransfer.types. Data sebenar hanya boleh dibaca dalam peristiwa pelepasan pada sasaran yang menerima pelepasan.

Senarai Fail

Apabila pengguna menyeret dari komputer meja, e.dataTransfer.files ialah FileList yang mengandungi objek File. Senarai itu kosong bagi seretan yang bermula di dalam halaman. Anggapnya sebagai cara piawai untuk mengesan pelepasan fail luaran dan mengakses saiz, nama serta jenisnya.

Koleksi Unsur

e.dataTransfer.items mendedahkan kedua-dua rentetan dan fail sebagai objek DataTransferItem. Setiap unsur mempunyai kind ("string" atau "file"), type (MIME) dan getAsString(cb) / getAsFile(). Koleksi ini ialah alternatif moden yang peka terhadap jenis berbanding files + getData.

for (const item of e.dataTransfer.items) {
  if (item.kind === "file") {
    const file = item.getAsFile();
    console.log(file.name);
  } else {
    item.getAsString((s) => console.log(item.type, s));
  }
}

effectAllowed berbanding dropEffect

effectAllowed ditetapkan oleh sumber dalam peristiwa permulaan seretan dan menyenaraikan operasi yang disokong oleh sumber. dropEffect ditetapkan oleh sasaran dalam seretan ke atas dan memilih salah satu operasi tersebut. Pelayar membatalkan pelepasan jika kedua-duanya tidak sepadan.

Imej Seretan Tersuai

e.dataTransfer.setDragImage(node, x, y) menggantikan bayangan lalai. Hantar elemen DOM di luar skrin yang digayakan mengikut keperluan, bersama ofset kursor berbanding elemen tersebut. Perubahan ini hanya terpakai untuk seretan semasa.

clearData

e.dataTransfer.clearData() memadamkan semua format; clearData("text/plain") membuang satu format. Ia jarang diperlukan kerana dataTransfer dicipta semula untuk setiap seretan, tetapi berguna apabila anda mula mengisi data kemudian memutuskan untuk membatalkannya.

Tingkah Laku Merentas Asal

Fail yang diseret dari halaman pada asal A ke halaman pada asal B masih dihantar — API ini berfungsi merentas asal. Walau bagaimanapun, halaman penerima hanya melihat perkara yang diletakkan secara jelas oleh sumber dalam dataTransfer; akses DOM sewenang-wenangnya tidak diberikan.

Seret dari Pelayar ke Komputer Meja

Dengan menulis jenis "DownloadURL" (setData("DownloadURL", "image/png:filename.png:https://...")), sesebuah halaman boleh membolehkan pengguna menyeret fail keluar dari pelayar ke komputer meja. Sokongan pelayar adalah terhad (pelayar berasaskan Chromium), jadi kesan keadaan ini dan gunakan sandaran dengan sewajarnya.

Semakan Pengetahuan

Mengapakah dataTransfer.getData() tidak dibenarkan memulangkan nilai sebenar yang disimpan semasa peristiwa dragover?

Ringkasan

dataTransfer ialah jambatan antara sumber seretan dan sasaran lepasan. Gunakan setData/getData untuk muatan rentetan berjenis, items untuk paparan bersatu files+rentetan, files untuk lepasan daripada komputer meja, setDragImage untuk pratonton tersuai, dan effectAllowed/dropEffect untuk merundingkan operasi.

Percuma untuk bermula

Pelajari HTML dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Objek dataTransfer” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran HTML Academy, termasuk “Objek dataTransfer”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus HTML Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Objek dataTransfer”?

Pindahkan data antara sumber seretan dan sasaran pelepasan Anda berlatih HTML Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan HTML Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran HTML Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Objek dataTransfer” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran HTML Academy ini?

Ya. Setiap pelajaran HTML Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Atribut draggable dan Peristiwa dragstart
  2. Peristiwa dragover dan drop
  3. Objek dataTransfer
  4. Senarai Seret untuk Menyusun Semula
← Kembali ke HTML Academy