欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端vue中的拖拽知識(shí)詳解

 更新時(shí)間:2025年01月23日 10:04:32   作者:Jinuss  
這篇文章主要介紹了前端拖拽功能的基本知識(shí),并詳細(xì)講解了如何在Vue3工程中實(shí)現(xiàn)拖拽指令,拖拽功能涉及HTML、CSS和JavaScript的綜合運(yùn)用,需要的朋友可以參考下

概述

本文主要介紹前端中拖拽相關(guān)的知識(shí)以及如何在 vue3 工程里實(shí)現(xiàn)拖拽指令。

前端中的拖拽

前端中的拖拽功能是一種交互設(shè)計(jì),允許用戶(hù)通過(guò)鼠標(biāo)或觸摸操作移動(dòng)頁(yè)面上的元素到不同的位置。這一功能的實(shí)現(xiàn)涉及 HTMLCSS 和 JavaScript 的綜合運(yùn)用。

HTML元素拖拽

  • 拖拽元素

HTML 元素有一個(gè)draggable屬性,接受一個(gè)布爾值,默認(rèn)值為false(不可拖拽)。

<div draggable="true">我是可拖動(dòng)的</div>
  • 事件處理

拖拽功能的實(shí)現(xiàn)依賴(lài)于幾個(gè)關(guān)鍵的拖放事件:

  • dragstart: 當(dāng)用戶(hù)開(kāi)始拖動(dòng)元素時(shí)觸發(fā),可以在這里設(shè)置數(shù)據(jù)傳輸(如拖動(dòng)的數(shù)據(jù)類(lèi)型和值)。

  • drag: 元素正在被拖動(dòng)時(shí)連續(xù)觸發(fā)。

  • dragend: 用戶(hù)釋放鼠標(biāo),結(jié)束拖動(dòng)時(shí)觸發(fā)。

  • dragenter 和 dragover: 當(dāng)拖動(dòng)的元素進(jìn)入或停留在目標(biāo)區(qū)域時(shí)觸發(fā)。通常需要阻止這兩個(gè)事件的默認(rèn)行為,以允許元素被放置。

  • drop: 在拖動(dòng)元素被釋放到有效目標(biāo)時(shí)觸發(fā),是接收拖動(dòng)數(shù)據(jù)并執(zhí)行相應(yīng)操作的地方。

示例效果

效果如下:

核心代碼

代碼如下:

dragClass.addEventListener("dragstart", (e) => {
  const node = e.target.cloneNode(true);
  e.dataTransfer.setData("cloneNode", node.outerHTML);
});

dragClass.addEventListener("dragend", (e) => {
  e.dataTransfer.clearData();
});

dropDom.addEventListener("dragover", (e) => {
  if (e.target.className == "draggable") {
    e.preventDefault();
  }
});

dropDom.addEventListener("drop", (e) => {
  e.preventDefault();
  const node = e.dataTransfer.getData("cloneNode");
  e.target.innerHTML = node;
  const originCellNode = e.dataTransfer.getData("text/html");
  if (originCellNode) {
    originCellNode.removeChild(originCellNode);
  }
  e.dataTransfer.clearData("cloneNode");
});

dragTableCell.addEventListener("dragstart", (e) => {
  const node = e.target.cloneNode(true);
  e.dataTransfer.setData("cloneNode", node.outerHTML);
  e.dataTransfer.setData("text/html", e.target.parentNode.outerHTML);
});

參考地址

參考地址:https://github.com/Jinuss/blog/blob/main/docs/Demo/03.drag.html

vue3 拖拽指令封裝

在 vue3 中實(shí)現(xiàn)組件的拖拽,可以封裝一個(gè)拖拽指令,再需要進(jìn)行拖拽的組件上加上v-drag即可。

拖拽指令實(shí)現(xiàn)實(shí)現(xiàn)如下:

export const drag = {
  mounted(el) {
    el.style.position = "absolute";
    el.style.cursor = "move";

    let startX, startY, initialX, initialY;

    const dragStart = (e) => {
      startX = e.clientX;
      startY = e.clientY;
      initialX = el.offsetLeft;
      initialY = el.offsetTop;

      document.addEventListener("mousemove", dragMove);
      document.addEventListener("mouseup", dragEnd);
    };

    const dragMove = (e) => {
      const dx = e.clientX - startX;
      const dy = e.clientY - startY;
      const newX = initialX + dx;
      const newY = initialY + dy;

      const maxX = window.innerWidth - el.offsetWidth;
      const maxY = window.innerHeight - el.offsetHeight;

      /**邊界檢查 */
      el.style.left = `${Math.min(Math.max(newX, 0), maxX)}px`;
      el.style.top = `${Math.min(Math.max(newY, 0), maxY)}px`;
    };

    const dragEnd = () => {
      document.removeEventListener("mousemove", dragMove);
      document.removeEventListener("mouseup", dragEnd);
    };

    el.addEventListener("mousedown", dragStart);
  },
};

總結(jié) 

到此這篇關(guān)于前端vue中的拖拽知識(shí)的文章就介紹到這了,更多相關(guān)前端vue拖拽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue-Router的使用方法

    Vue-Router的使用方法

    這篇文章主要介紹了Vue-Router的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Vue3造輪子之Typescript配置highlight過(guò)程

    Vue3造輪子之Typescript配置highlight過(guò)程

    這篇文章主要介紹了Vue3造輪子之Typescript配置highlight過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue項(xiàng)目展示pdf文件的方法實(shí)現(xiàn)

    vue項(xiàng)目展示pdf文件的方法實(shí)現(xiàn)

    本文主要介紹了vue項(xiàng)目展示pdf文件的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 關(guān)閉eslint檢查和ts檢查的簡(jiǎn)單步驟記錄

    關(guān)閉eslint檢查和ts檢查的簡(jiǎn)單步驟記錄

    這篇文章主要給大家介紹了關(guān)于關(guān)閉eslint檢查和ts檢查的相關(guān)資料,eslint是一個(gè)JavaScript的校驗(yàn)插件,通常用來(lái)校驗(yàn)語(yǔ)法或代碼的書(shū)寫(xiě)風(fēng)格,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Vue的狀態(tài)管理vuex使用方法詳解

    Vue的狀態(tài)管理vuex使用方法詳解

    由于Vue多個(gè)狀態(tài)分散的跨越在許多組件和交互間各個(gè)角落,大型應(yīng)用復(fù)雜度也經(jīng)常逐漸增長(zhǎng)。為了解決這個(gè)問(wèn)題,Vue提供了vuex。本文將詳細(xì)介紹Vue狀態(tài)管理vuex,需要的朋友可以參考下
    2020-02-02
  • webstorm建立vue-cli腳手架的傻瓜式教程

    webstorm建立vue-cli腳手架的傻瓜式教程

    這篇文章主要給大家介紹了關(guān)于webstorm建立vue-cli腳手架的傻瓜式教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • vue響應(yīng)式更新機(jī)制及不使用框架實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)雙向綁定問(wèn)題

    vue響應(yīng)式更新機(jī)制及不使用框架實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)雙向綁定問(wèn)題

    vue是一款具有響應(yīng)式更新機(jī)制的框架,既可以實(shí)現(xiàn)單向數(shù)據(jù)流也可以實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。這篇文章主要介紹了vue響應(yīng)式更新機(jī)制及不使用框架實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)雙向綁定問(wèn)題,需要的朋友可以參考下
    2019-06-06
  • Vue實(shí)現(xiàn)未登錄跳轉(zhuǎn)到登錄頁(yè)的示例代碼

    Vue實(shí)現(xiàn)未登錄跳轉(zhuǎn)到登錄頁(yè)的示例代碼

    本文主要介紹了Vue實(shí)現(xiàn)未登錄跳轉(zhuǎn)到登錄頁(yè)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例

    vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例

    這篇文章主要介紹了vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue中子組件傳遞數(shù)據(jù)給父組件的講解

    vue中子組件傳遞數(shù)據(jù)給父組件的講解

    今天小編就為大家分享一篇關(guān)于vue中子組件傳遞數(shù)據(jù)給父組件的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01

最新評(píng)論