最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端vue中的拖拽知識詳解

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

概述

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

前端中的拖拽

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

HTML元素拖拽

  • 拖拽元素

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

<div draggable="true">我是可拖動的</div>
  • 事件處理

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

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

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

  • dragend: 用戶釋放鼠標(biāo),結(jié)束拖動時觸發(fā)。

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

  • drop: 在拖動元素被釋放到有效目標(biāo)時觸發(fā),是接收拖動數(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 中實現(xiàn)組件的拖拽,可以封裝一個拖拽指令,再需要進(jìn)行拖拽的組件上加上v-drag即可。

拖拽指令實現(xiàn)實現(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中的拖拽知識的文章就介紹到這了,更多相關(guān)前端vue拖拽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue使用echarts定制特殊的儀表盤

    Vue使用echarts定制特殊的儀表盤

    這篇文章主要為大家詳細(xì)介紹了Vue使用echarts定制特殊的儀表盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue使用axios出現(xiàn)options請求方法

    Vue使用axios出現(xiàn)options請求方法

    這篇文章主要介紹了Vue使用axios出現(xiàn)options請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vant實現(xiàn)購物車功能

    vant實現(xiàn)購物車功能

    這篇文章主要為大家詳細(xì)介紹了vant實現(xiàn)購物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 關(guān)于.prettierrc代碼格式化配置方式

    關(guān)于.prettierrc代碼格式化配置方式

    這篇文章主要介紹了關(guān)于.prettierrc代碼格式化配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue自定義一個v-model的實現(xiàn)代碼

    vue自定義一個v-model的實現(xiàn)代碼

    這篇文章主要介紹了vue自定義一個v-model的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Vue3 的ref和reactive的用法和區(qū)別示例解析

    Vue3 的ref和reactive的用法和區(qū)別示例解析

    ref和reactive是Vue3中用來實現(xiàn)數(shù)據(jù)響應(yīng)式的API,一般情況下,ref定義基本數(shù)據(jù)類型,reactive定義引用數(shù)據(jù)類型,本文給大家介紹Vue3 的ref和reactive的用法和區(qū)別,感興趣的朋友一起看看吧
    2023-10-10
  • 一文帶你搞懂V8垃圾回收系統(tǒng)

    一文帶你搞懂V8垃圾回收系統(tǒng)

    在V8中,JavaScript的內(nèi)存空間分為棧(Stack)和堆(Heap)兩部分,垃圾回收的基本思路是:查找內(nèi)存中的所有變量,看哪些已經(jīng)不再需要,然后釋放這些變量所占用的內(nèi)存,本文就給大家梳理一下V8垃圾回收系統(tǒng),需要的朋友可以參考下
    2023-07-07
  • Vue路由模塊化配置的完整步驟

    Vue路由模塊化配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于Vue路由模塊化配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue+ECharts+高德地圖API實現(xiàn)天氣預(yù)報數(shù)據(jù)可視化的教程

    Vue+ECharts+高德地圖API實現(xiàn)天氣預(yù)報數(shù)據(jù)可視化的教程

    所謂數(shù)據(jù)可視化,我們可以理解為從宏觀角度來看一眼就能看出來整個數(shù)據(jù)的占比,走向,對于數(shù)據(jù)可視化,很多互聯(lián)網(wǎng)公司是很看重這一塊的,包括大廠,本就將給大家介紹如何通過Vue+ECharts+高德地圖API實現(xiàn)天氣預(yù)報數(shù)據(jù)可視化
    2023-06-06
  • Vue?dialog模態(tài)框的封裝方法

    Vue?dialog模態(tài)框的封裝方法

    這篇文章主要為大家詳細(xì)介紹了Vue?dialog模態(tài)框的封裝方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

景东| 克山县| 上虞市| 清水河县| 汾阳市| 伊宁县| 山西省| 常熟市| 麻阳| 资阳市| 东安县| 金山区| 彰化县| 若羌县| 大悟县| 会理县| 嘉定区| 阳朔县| 彩票| 南涧| 青州市| 田阳县| 包头市| 崇文区| 额敏县| 阿合奇县| 永安市| 谷城县| 黄梅县| 南康市| 封开县| 南靖县| 海宁市| 图片| 盱眙县| 凤阳县| 磐安县| 天长市| 霞浦县| 龙陵县| 偃师市|