Rumah hujung hadapan web View.js Vue dalam amalan: seret dan lepas pembangunan komponen

Vue dalam amalan: seret dan lepas pembangunan komponen

Nov 24, 2023 am 08:44 AM
vue seret Pembangunan komponen

Vue dalam amalan: seret dan lepas pembangunan komponen

Vue Practical Combat: Drag and Drop Component Development

Memandangkan aplikasi Web secara beransur-ansur digunakan secara meluas, keperluan pengguna untuk pengalaman pengguna juga semakin meningkat Semakin tinggi. Fungsi drag-and-drop telah menjadi fungsi yang sangat biasa dalam aplikasi web, seperti pengisihan seret dan lepas, saiz semula seret dan lepas, dsb. Artikel ini akan memperkenalkan cara menggunakan Vue untuk melaksanakan komponen seret dan lepas.

Pelaksanaan komponen drag-and-drop melibatkan titik pengetahuan seperti peristiwa tetikus, animasi CSS dan operasi DOM, dan Vue, sebagai rangka kerja JavaScript yang progresif, boleh membantu kami melengkapkan fungsi ini. Proses pelaksanaan khusus akan diperkenalkan di bawah melalui contoh.

Pertama, kita perlu mencipta komponen asas Vue, termasuk kawasan seret dan elemen seret:

<template>
  <div class="drag-box">
    <div class="drag-handle" @mousedown="handleMouseDown">拖拽元素</div>
  </div>
</template>
Salin selepas log masuk

Di sini kami menggunakan acara @mousedown</code > untuk mendengar acara akhbar tetikus dan kaedah <code>handleMouseDown terikat untuk mengendalikan acara ini. Dalam kaedah ini, kita perlu mengira offset tetikus dan menyimpannya dalam contoh komponen. Pada masa yang sama, kami menetapkan komponen semasa untuk diseret dan menetapkan gaya CSS untuk melaraskan kedudukannya. @mousedown事件来监听鼠标按下事件,并且绑定了一个handleMouseDown方法来处理这个事件。在此方法中,我们需要计算出鼠标的偏移量,并将其保存在组件实例中。同时,我们将当前组件设置为被拖拽状态,并且设置CSS样式来调整其位置。

<script>
export default {
  data() {
    return {
      isDragging: false,
      dragStartX: 0,
      dragStartY: 0,
      dragOffsetX: 0,
      dragOffsetY: 0,
    };
  },
  methods: {
    handleMouseDown(event) {
      this.isDragging = true;

      const rect = event.target.getBoundingClientRect();
      this.dragStartX = event.clientX;
      this.dragStartY = event.clientY;
      this.dragOffsetX = event.clientX - rect.left;
      this.dragOffsetY = event.clientY - rect.top;

      document.addEventListener("mousemove", this.handleMouseMove);
      document.addEventListener("mouseup", this.handleMouseUp);
    },
    handleMouseMove(event) {
      if (this.isDragging) {
        const box = this.$el.getBoundingClientRect();
        const x = event.clientX - this.dragStartX;
        const y = event.clientY - this.dragStartY;

        this.$el.style.transform = `translate(${x}px, ${y}px)`;
      }
    },
    handleMouseUp(event) {
      this.isDragging = false;
      this.$el.style.transition = "all 0.3s ease-out";
      this.$el.style.transform = `translate(0, 0)`;
      setTimeout(() => {
        this.$el.style.transition = "";
      }, 300);

      document.removeEventListener("mousemove", this.handleMouseMove);
      document.removeEventListener("mouseup", this.handleMouseUp);
    },
  },
};
</script>
Salin selepas log masuk

在这个例子中,我们使用了document.addEventListener方法来监听鼠标移动和鼠标松开事件。在鼠标移动的事件处理方法中,我们获取鼠标的位置并计算出偏移量。然后,我们使用CSS的transform

<template>
  <div class="drag-demo">
    <DragBox class="drag-box">
      <div class="drag-handle" @mousedown="handleMouseDown">
        拖拽元素
      </div>
    </DragBox>
  </div>
</template>

<script>
import DragBox from "./DragBox.vue";

export default {
  components: {
    DragBox,
  },
  methods: {
    handleMouseDown(event) {
      //...
    },
  },
};
</script>

<style>
.drag-box {
  width: 300px;
  height: 300px;
  border: 1px solid gray;
  position: relative;
}

.drag-handle {
  width: 100px;
  height: 50px;
  background-color: red;
  color: white;
  text-align: center;
  line-height: 50px;
  cursor: move;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</style>
Salin selepas log masuk
Dalam contoh ini, kami menggunakan kaedah document.addEventListener untuk mendengar pergerakan tetikus dan peristiwa pelepasan tetikus. Dalam kaedah pengendalian peristiwa pergerakan tetikus, kami memperoleh kedudukan tetikus dan mengira offset. Kemudian, kami menggunakan sifat CSS transform untuk melaraskan kedudukan elemen yang diseret. Dalam acara pelepasan tetikus, kami membatalkan pemantauan pergerakan tetikus dan peristiwa pelepasan tetikus, dan menggunakan animasi CSS untuk beralih kembali ke kedudukan asal.

Akhir sekali, kami boleh memperkenalkan komponen seret dan lepas ini dalam komponen induk dan menetapkan sifat dan gayanya mengikut keperluan. Di bawah ialah kod sampel yang membenarkan elemen penyeretan dihadkan kepada kawasan penyeretan.

rrreee

Dalam kod sampel ini, kami meletakkan elemen seret dalam kawasan seret dan menetapkan beberapa gaya asas. Dalam kaedah pengendalian acara, kita boleh mengendalikan kedudukan elemen yang diseret mengikut keperluan dan menyekat pergerakannya di kawasan seretan.

Ringkasan

Fungsi seret dan lepas sudah sangat biasa dalam aplikasi web, dan Vue, sebagai rangka kerja JavaScript yang popular, boleh menyokong fungsi ini dengan baik. Dalam artikel ini, kami memperkenalkan cara menggunakan Vue untuk melaksanakan komponen seret dan lepas yang mudah, dan menerangkan proses pelaksanaan melalui contoh kod tertentu.

Melalui contoh ini, kita boleh mempunyai pemahaman yang lebih mendalam tentang pengikatan data, komponenisasi, pemprosesan acara dan ciri lain Vue. Dalam pembangunan sebenar, kami boleh menambah lebih banyak fungsi dan pengoptimuman mengikut keperluan, seperti menambah kesan animasi, mengehadkan julat seretan, dsb. #🎜🎜#

Atas ialah kandungan terperinci Vue dalam amalan: seret dan lepas pembangunan komponen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menambah fungsi ke butang untuk vue Cara menambah fungsi ke butang untuk vue Apr 08, 2025 am 08:51 AM

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apr 07, 2025 pm 11:57 PM

Pembangunan pelbagai halaman Vue adalah cara untuk membina aplikasi menggunakan rangka kerja VUE.JS, di mana permohonan dibahagikan kepada halaman berasingan: Penyelenggaraan kod: Memisahkan aplikasi ke dalam beberapa halaman boleh menjadikan kod lebih mudah untuk dikendalikan dan diselenggarakan. Modularity: Setiap halaman boleh digunakan sebagai modul yang berasingan untuk penggunaan semula dan penggantian mudah. Routing mudah: Navigasi antara halaman boleh diuruskan melalui konfigurasi penghalaan mudah. Pengoptimuman SEO: Setiap halaman mempunyai URL sendiri, yang membantu SEO.

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Cara Menanyakan Versi Vue Cara Menanyakan Versi Vue Apr 07, 2025 pm 11:24 PM

Anda boleh menanyakan versi VUE dengan menggunakan Vue Devtools untuk melihat tab VUE dalam konsol penyemak imbas. Gunakan NPM untuk menjalankan arahan "NPM LIST -G VUE". Cari item VUE dalam objek "Dependencies" fail Package.json. Untuk projek Vue CLI, jalankan perintah "Vue -version". Semak maklumat versi di & lt; skrip & gt; Tag dalam fail HTML yang merujuk kepada fail VUE.

Cara Menggunakan Fungsi Memintas Vue Cara Menggunakan Fungsi Memintas Vue Apr 08, 2025 am 06:51 AM

Pemintasan fungsi dalam VUE adalah teknik yang digunakan untuk mengehadkan bilangan kali fungsi dipanggil dalam tempoh masa yang ditentukan dan mencegah masalah prestasi. Kaedah pelaksanaan adalah: mengimport perpustakaan lodash: import {debounce} dari 'lodash'; Gunakan fungsi debounce untuk membuat fungsi memintas: const debouncedfunction = debounce (() = & gt; { / logical /}, 500); Panggil fungsi Intercept, dan fungsi kawalan dipanggil paling banyak sekali dalam 500 milisaat.

See all articles