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

Vue3實現(xiàn)可視化拖拽標簽小程序功能

 更新時間:2023年09月04日 15:01:08   作者:飯一口口吃  
這篇文章主要介紹了Vue3實現(xiàn)可視化拖拽標簽小程序,實現(xiàn)功能可視化標簽拖拽,雙擊標簽可修改標簽內(nèi)容,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

介紹

在這里插入圖片描述

實現(xiàn)功能:可視化標簽拖拽,雙擊標簽可修改標簽內(nèi)容

HTML結(jié)構(gòu)

<div class="box" v-move>
  <div class="header">標簽1</div>
  <div @dblclick="startEditing" v-if="!isEditing">{{content}}</div>
  <input type="text" v-model="editedContent" @blur = 'stopEditing' v-if="isEditing">
</div>

一個大DIV包含里面存放兩個DIV一個input
header為頭部標簽名稱
內(nèi)容區(qū)域綁定雙擊鼠標事件,觸發(fā)開始修改事件(startEditing),使用v-if進行標簽的顯示和隱藏操作
input標簽,事件綁定為修改內(nèi)容,綁定獲取焦點事件(@blue=“stopEditing”),并且綁定和內(nèi)容區(qū)域一樣的變量用來控制顯示隱藏,一方為顯示另一方必定為隱藏

TS部分

import { Directive, DirectiveBinding } from "vue";
const vMove: Directive<any, void> = {
  mounted(el: HTMLElement, binding: DirectiveBinding) {
    // 創(chuàng)建一個變量 moveElement,表示 DOM 元素的子元素(假設這是要拖動的元素)
    const moveElement: HTMLDivElement = el.firstElementChild as HTMLDivElement;
    // 鼠標按下事件處理函數(shù)
    const mouseDown = (e: MouseEvent) => {
      // 計算鼠標相對于元素的偏移量
      const X = e.clientX - el.offsetLeft;
      const Y = e.clientY - el.offsetTop;
      // 鼠標移動事件處理函數(shù)
      const move = (e: MouseEvent) => {
        // 更新元素的位置,實現(xiàn)拖動效果
        el.style.left = e.clientX - X + "px";
        el.style.top = e.clientY - Y + "px";
      };
      // 添加鼠標移動事件監(jiān)聽器
      document.addEventListener("mousemove", move);
      // 添加鼠標松開事件監(jiān)聽器,用于停止拖動
      document.addEventListener("mouseup", () => {
        document.removeEventListener("mousemove", move);
      });
    };
    // 將鼠標按下事件處理函數(shù)添加到元素上
    moveElement.addEventListener("mousedown", mouseDown);
  },
};

采用自定義指令進行設置移動組件,DirectiveDirectiveBinding:這是Vue.js中用于自定義指令的一些類型和功能。自定義指令允許你在DOM元素上附加自定義行為。Directive 是自定義指令的基本類型,而 DirectiveBinding 是與指令綁定的數(shù)據(jù)的類型。

上述代碼定義了一個名為 vMove 的自定義指令,它會在元素上附加拖動行為。當鼠標在 moveElement(元素的子元素)上按下時,啟動拖動操作,通過鼠標移動事件更新元素的位置,并在鼠標松開時停止拖動。這個自定義指令可以在Vue.js應用中使用,將其添加到需要拖動的元素上,以實現(xiàn)拖拽功能。

<script setup lang="ts">
// 導入 Vue 和自定義指令相關的模塊
import { ref, Directive, DirectiveBinding } from "vue";
// 自定義指令 vMove 的實現(xiàn)
const vMove: Directive<any, void> = (el: HTMLElement, binding: DirectiveBinding) => {
  // 獲取需要移動的 DOM 元素,假設它是傳入元素的第一個子元素
  let moveElement: HTMLElement = el.firstElementChild as HTMLDivElement;
  console.log(moveElement);
  // 鼠標按下事件處理函數(shù)
  const mouseDown = (e: MouseEvent) => {
    // 計算鼠標點擊位置相對于元素左上角的偏移量
    let X = e.clientX - el.offsetLeft;
    let Y = e.clientY - el.offsetTop;
    // 鼠標移動事件處理函數(shù)
    const move = (e: MouseEvent) => {
      console.log(e);
      // 更新元素的位置,實現(xiàn)拖動效果
      el.style.left = e.clientX - X + "px";
      el.style.top = e.clientY - Y + "px";
    };
    // 添加鼠標移動事件監(jiān)聽器,以便拖動元素
    document.addEventListener("mousemove", move);
    // 添加鼠標松開事件監(jiān)聽器,停止拖動
    document.addEventListener("mouseup", () => {
      document.removeEventListener("mousemove", move);
    });
  };
  // 將鼠標按下事件處理函數(shù)添加到移動元素上
  moveElement.addEventListener("mousedown", mouseDown);
  console.log(binding);
};
// 使用 ref 創(chuàng)建響應式數(shù)據(jù)
const content = ref('內(nèi)容'); // 原始內(nèi)容
const isEditing = ref(false); // 是否處于編輯模式
const editedContent = ref(''); // 編輯后的內(nèi)容
// 進入編輯模式
const startEditing = () => {
  isEditing.value = true;
  editedContent.value = content.value; // 將原始內(nèi)容設置為編輯后的內(nèi)容
}
// 退出編輯模式
const stopEditing = () => {
  isEditing.value = false;
  content.value = editedContent.value; // 保存編輯后的內(nèi)容
}
</script>
<template>
  <div class="box" v-move>
    <div class="header">標簽1</div>
    <!-- 使用雙擊事件觸發(fā)編輯模式 -->
    <div @dblclick="startEditing" v-if="!isEditing">{{ content }}</div>
    <!-- 編輯模式下顯示輸入框 -->
    <input type="text" v-model="editedContent" @blur="stopEditing" v-if="isEditing">
  </div>
</template>
<style scoped>
.box {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 200px;
  height: 200px;
  border: 3px solid;
  background: #f59c09;
  .header {
    height: 20px;
    background: #f59c09;
    color: white;
  }
}
</style>

到此這篇關于Vue3實現(xiàn)可視化拖拽標簽小程序的文章就介紹到這了,更多相關Vue3拖拽標簽小程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue項目開啟gzip壓縮功能簡單實例

    vue項目開啟gzip壓縮功能簡單實例

    這篇文章主要給大家介紹了關于vue項目開啟gzip壓縮功能的相關資料,gizp壓縮是一種http請求優(yōu)化方式,通過減少文件體積來提高加載速度,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 一篇文章告訴你如何實現(xiàn)Vue前端分頁和后端分頁

    一篇文章告訴你如何實現(xiàn)Vue前端分頁和后端分頁

    這篇文章主要為大家介紹了如何實現(xiàn)Vue前端分頁和后端分頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue.js或js實現(xiàn)中文A-Z排序的方法

    vue.js或js實現(xiàn)中文A-Z排序的方法

    下面小編就為大家分享一篇vue.js或js實現(xiàn)中文A-Z排序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue3新增時自動獲取當前時間的操作方法

    Vue3新增時自動獲取當前時間的操作方法

    這篇文章主要介紹了Vue3新增時自動獲取當前時間的操作方法,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 解決Vue2.0自帶瀏覽器里無法打開的原因(兼容處理)

    解決Vue2.0自帶瀏覽器里無法打開的原因(兼容處理)

    本篇文章主要介紹了解決Vue2.0自帶瀏覽器里無法打開的原因(兼容處理),非常具有實用價值,需要的朋友可以參考下
    2017-07-07
  • vue跳轉(zhuǎn)后不記錄歷史記錄的問題

    vue跳轉(zhuǎn)后不記錄歷史記錄的問題

    這篇文章主要介紹了vue跳轉(zhuǎn)后不記錄歷史記錄的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 淺析vue中常見循環(huán)遍歷指令的使用 v-for

    淺析vue中常見循環(huán)遍歷指令的使用 v-for

    這篇文章主要介紹了vue中常見循環(huán)遍歷指令的使用 v-for,包括v-for遍歷數(shù)組,v-for遍歷json對象,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2018-04-04
  • vue中this.$message的實現(xiàn)過程詳解

    vue中this.$message的實現(xiàn)過程詳解

    Message在開發(fā)中的使用頻率很高,也算是Element-UI組件庫中比較簡單的,對于感興趣的朋友可以一起探討一下Message組件的實現(xiàn),本文詳細介紹了vue中this.$message的實現(xiàn)過程,感興趣的同學可以參考一下
    2023-04-04
  • vue升降版本以及如何查看項目版本

    vue升降版本以及如何查看項目版本

    這篇文章主要給大家介紹了關于vue升降版本以及如何查看項目版本的相關資料,在開發(fā)和維護Vue.js應用程序時了解所使用的Vue.js版本非常重要,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • vue.js獲得當前元素的文字信息方法

    vue.js獲得當前元素的文字信息方法

    下面小編就為大家分享一篇vue.js獲得當前元素的文字信息方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

太康县| 察哈| 榆林市| 黑山县| 循化| 台州市| 浦江县| 南丰县| 扎赉特旗| 盐津县| 武义县| 鲁甸县| 吴桥县| 康定县| 南通市| 龙陵县| 长乐市| 岗巴县| 灌南县| 崇仁县| 松滋市| 仪陇县| 涿州市| 张家界市| 华坪县| 沧源| 临颍县| 平顶山市| 昆明市| 丰宁| 嫩江县| 钟祥市| 乐至县| 监利县| 平阴县| 石渠县| 嘉禾县| 桐柏县| 宁海县| 上犹县| 普安县|