精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue3問題:如何實現組件拖拽實時預覽功能?

開發 前端
實現一個CMS內容管理系統,在后臺進行內容編輯,在官網更新展示內容。關于后臺的編輯功能,大致分為兩部分:組件拖拽預覽、組件內容編輯實時預覽。

本文主要內容分三部分,第一部分是需求分析,第二部分是實現步驟,第三部分是問題詳解。

如果您只需要解決問題,請閱讀第一、二部分即可。

如果您有更多時間,進一步學習問題相關知識點,請閱讀至第三部分。

1、需求分析

實現一個CMS內容管理系統,在后臺進行內容編輯,在官網更新展示內容。

關于后臺的編輯功能,大致分為兩部分:組件拖拽預覽、組件內容編輯實時預覽。

對于組件拖拽預覽,用戶可以在含有各種功能組件的列表中,選擇需要的組件進行拖拽。將組件拖拽到預覽畫布中后,可以在畫布中預覽組件的內容。

對于組件內容編輯實時預覽,用戶可以點擊編輯按鈕,顯示對應組件的內容編輯信息。當修改組件內容時,在畫布中可以實時預覽組件的變化。

2、實現步驟

(1)關于拖拽組件庫的選擇

關于拖拽組件庫,在github上有很多,最熱門的當屬vuedraggable這個庫。

它基于Sortable.js,擁有完整的中文文檔,所以很多朋友在做拖拽功能時,都會優先考慮它。

但是,我在使用的過程中,在組件拖拽、取消組件拖拽這里,遇到了一些小問題。不知道是我操作的問題,還是庫本身存在BUG,所以最終沒有選用它。

于是我發現了,一個更加好用的拖拽庫vue-draggable-next。

它的出現是參考了vuedraggable這個庫,所以說很多用法很相似,但是使用起來較之更加友善。總結為一個詞,自由。

下面我們的拖拽功能實現,就是利用了vue-draggable-next這個庫。

如果你對拖拽底層原理感興趣,并且有空余時間,勞請閱至第三部分拖拽原理總結。

(2)拖拽功能代碼實例

模版和邏輯中代碼都分為了三部分:組件列表、預覽畫布、內容編輯。

布局時,樣式根據需求自定義,此處只是提供了功能的基本邏輯實現。

使用時,關于拖拽組件的需求,根據文檔中提供的屬性和事件的描述,靈活配置完善。

vue-draggable-next庫文檔地址:https://github.com/anish2690/vue-draggable-next。

安裝依賴:

npm install vue-draggable-next
//or
yarn add vue-draggable-next

模板代碼:

<template>
<div style="display: flex;cursor: pointer;">
<!-- 組件列表 左側 -->
<div style="width:30vw;padding:30px;height:300px;border: 1px solid #000;text-align: center">
<h1>組件列表</h1>
<VueDraggableNext :list="componentNameList" :group="{ name: 'people', pull: 'clone', put: false }" :sort="false">
<div v-for="element in componentNameList" :key="element.name">
<div style="padding: 10px;background: #ccc;margin-bottom: 10px">
<el-button> {{ element.name }}</el-button>
</div>
</div>
</VueDraggableNext>
</div>

<!-- 預覽畫布 中間 -->
<div style="width:30vw;padding:30px;height:300px;border: 1px solid #000;text-align: center">
<h1>預覽畫布</h1>
<VueDraggableNext :list="componentList" group="people" :sort="false">
<div v-for="(element, index) in componentList" :key="element.name">
<div>
<el-button @click="changeComponent(element)" size="small">編輯</el-button>
<el-button @click="deleteComponent(index)" size="small">刪除</el-button>
</div>
<component :is="element.component" :details="element.details"></component>
</div>
</VueDraggableNext>
</div>

<!-- 內容編輯 右側 -->
<div style="width:30vw;padding:30px;height:300px;border: 1px solid #000;text-align: center">
<h1>內容編輯</h1>
<div v-for="(nowDetails, index) in nowComponentDetail.details" :key="index">
{{ nowDetails.key }}: <el-input clearable v-model="nowDetails.value" />
</div>
</div>
</div>

</template>

邏輯代碼:

<script setup>
import {markRaw, reactive, ref, watch, nextTick} from "vue";
// 引入需要拖拽的組件
import About from "@/views/AboutView.vue"
// 引入拖拽庫
import { VueDraggableNext } from "vue-draggable-next";

// 組件列表數據
const componentNameList = [
{
// 組件ID
componentId:0,
// 組件名
name:'關于組件',
// 組件描述
description: '關于組件',
// 組件信息
component: markRaw(About),
// 組件需要編輯內容
details: About.props.details.default
},
{
componentId:1,
name:'關于組件1',
description: '關于組件1',
component:markRaw(About),
details: About.props.details.default
},
];
// 預覽畫布數據
let componentList = reactive([]);

watch(componentList, () => {
console.log(componentList, 'componentList')
})
// 畫布中刪除的點擊事件
const deleteComponent = (index) => {
componentList.splice(index, 1);
};

// 內容編輯數據
let nowComponentDetail = ref({});

// 畫布中編輯的點擊事件
const changeComponent = (element) => {
nowComponentDetail.value = element;
};
</script>

(3)功能組件代碼實例(參考)

此處提供了組件列表中,任意功能組件的編寫實例,組件的具體功能根據需求自定義。

特別注意,組件Props中details對象屬性的結構寫法,要靈活應用。

模版代碼:

<template>
<div style="padding: 10px;background: pink;margin-bottom: 10px">
{{ props.details.content }}
</div>
</template>

邏輯代碼:

<script setup>
import { defineProps } from "vue";

const props = defineProps({
details: {
type: Object,
default: {
content: {
key: '內容',
value: "我是About",
},
}
}
})
</script>

3、問題詳解

(1)拖拽實現的底層原理

拖拽的實現原理可以簡單描述為以下幾個步驟:

  • 觸發拖拽:通過監聽鼠標或觸摸事件,當用戶按下鼠標左鍵或觸摸屏幕時,表示開始拖拽操作。
  • 記錄拖拽信息:在拖拽開始時,記錄拖拽起始位置(鼠標或觸摸點的坐標),以及需要拖拽的元素的初始位置(相對于文檔的坐標)。
  • 更新拖拽元素位置:在拖拽過程中,通過監聽鼠標移動或觸摸滑動事件,計算鼠標或觸摸點的當前位置,并根據鼠標或觸摸點的位置變化,更新拖拽元素的位置。這可以通過修改元素的 CSS 屬性(如 left 和 top)或使用 CSS 變換(如 translateX 和 translateY)來實現。
  • 處理拖拽結束:當用戶釋放鼠標左鍵或觸摸結束時,表示拖拽結束。此時可以執行一些操作,如更新拖拽元素的最終位置、觸發事件或回調函數等。

以下是拖拽實現的基本原理代碼實例:

// 獲取拖拽元素
const draggableElement = document.getElementById('draggable');

// 記錄拖拽起始位置和拖拽元素的初始位置
let startX, startY, initialX, initialY;

// 監聽鼠標按下事件
draggableElement.addEventListener('mousedown', dragStart);
draggableElement.addEventListener('touchstart', dragStart);

// 監聽鼠標移動事件
document.addEventListener('mousemove', drag);
document.addEventListener('touchmove', drag);

// 監聽鼠標釋放事件
document.addEventListener('mouseup', dragEnd);
document.addEventListener('touchend', dragEnd);

// 拖拽開始事件處理程序
function dragStart(event) {
event.preventDefault();

if (event.type === 'touchstart') {
startX = event.touches[0].clientX;
startY = event.touches[0].clientY;
} else {
startX = event.clientX;
startY = event.clientY;
}

initialX = draggableElement.offsetLeft;
initialY = draggableElement.offsetTop;
}

// 拖拽事件處理程序
function drag(event) {
event.preventDefault();

if (event.type === 'touchmove') {
const currentX = event.touches[0].clientX - startX;
const currentY = event.touches[0].clientY - startY;
draggableElement.style.left = initialX + currentX + 'px';
draggableElement.style.top = initialY + currentY + 'px';
} else {
const currentX = event.clientX - startX;
const currentY = event.clientY - startY;
draggableElement.style.left = initialX + currentX + 'px';
draggableElement.style.top = initialY + currentY + 'px';
}
}

// 拖拽結束事件處理程序
function dragEnd() {
// 執行拖拽結束后的操作
}

(2)關于vue-draggable-next 庫的功能總結

vue-draggable-next 庫特點和功能的補充說明:

  • 基于 Vue 3:vue-draggable-next 是為 Vue.js 3 版本設計的拖拽庫,充分利用了 Vue 3 的響應式系統和組合式 API。
  • 輕量級和簡單易用:該庫的代碼量較少,易于理解和使用。它提供了一組簡單的指令和組件,可以輕松地將拖拽功能集成到 Vue.js 應用程序中。
  • 支持多種拖拽模式:vue-draggable-next 支持多種拖拽模式,包括自由拖拽、列表拖拽、網格拖拽等。您可以根據需求選擇適合的拖拽模式。
  • 自定義拖拽樣式和行為:該庫允許您自定義拖拽元素的樣式和行為。您可以定義拖拽時的樣式、占位符元素、限制拖拽的范圍等。
  • 事件和回調支持:vue-draggable-next 提供了一組事件和回調函數,可以在拖拽過程中監聽和處理各種事件。例如,您可以監聽拖拽開始、拖拽結束、拖拽元素排序等事件,并執行相應的操作。
  • 支持觸摸設備:該庫對觸摸設備提供了良好的支持,可以在移動設備上實現流暢的拖拽交互。
責任編輯:姜華 來源: 今日頭條
相關推薦

2021-12-02 05:50:35

Vue3 插件Vue應用

2024-02-27 08:27:18

元素拖拽Vue3拼圖驗證

2024-02-01 09:10:04

頁面引導工具Vue3

2024-03-27 08:28:31

元素拖拽API文件上傳

2024-01-03 08:20:40

2024-08-13 09:26:07

2023-12-18 09:58:46

微信掃碼支付Vue3

2023-11-20 08:29:33

Vue微信掃碼授權登錄

2024-01-08 08:50:19

Vue3級聯菜單數據懶加載

2022-07-27 08:40:06

父子組件VUE3

2023-11-28 09:03:59

Vue.jsJavaScript

2024-04-18 08:53:15

Vue3數字動畫

2021-08-27 08:38:10

CSS 技巧 resize

2022-03-10 11:04:04

Vue3Canvas前端

2022-07-29 11:03:47

VueUni-app

2020-12-01 08:34:31

Vue3組件實踐

2024-06-20 12:17:17

前端Vue3

2024-03-19 08:35:30

Vue3添加水印維護版權標識

2009-12-29 18:09:00

Silverlight

2021-05-18 07:51:37

Suspense組件Vue3
點贊
收藏

51CTO技術棧公眾號

亚洲高清免费视频| 成人综合在线观看| 日韩视频免费在线观看| 欧美一级片在线免费观看| 国内在线视频| ww亚洲ww在线观看国产| 国产精品天天狠天天看| 欧美人禽zoz0强交| 视频小说一区二区| 欧美日韩国产精选| 老太脱裤子让老头玩xxxxx| 黄色的视频在线免费观看| 精品一区在线看| 7m第一福利500精品视频| www.日本高清视频| av一级亚洲| 欧美日韩国产一二三| 欧美一级免费播放| 日本在线免费看| caoporn国产精品| 91九色在线视频| 中文字字幕在线中文| 久久久久久久久久久妇女| 亚洲精品电影在线| 三级黄色片播放| 亚洲精品粉嫩美女一区| 亚洲在线免费播放| 亚洲乱码一区二区三区| 四虎影视在线观看2413| 国产成人亚洲精品狼色在线| 国产精品高清在线观看| 国产一级特黄aaa大片| 91综合在线| 亚洲欧洲中文天堂| 亚洲国产精品第一页| 欧美韩国日本| 在线亚洲欧美专区二区| 黄页网站在线观看视频| 超碰超碰在线| 中文字幕一区三区| 日韩高清av| 免费毛片在线| 99精品视频在线免费观看| 91精品久久香蕉国产线看观看| 欧美一级做a爰片免费视频| 亚洲综合好骚| 69av成年福利视频| 国产乡下妇女做爰视频| 午夜精品国产| 久久久国产精彩视频美女艺术照福利| 国产综合精品在线| 色老板在线视频一区二区| 欧美大胆人体bbbb| 美女又黄又免费的视频| 国产一区二区高清在线| 欧美久久久久中文字幕| 91看片破解版| 久久精品97| 欧美另类高清zo欧美| 蜜臀av免费观看| 成人黄色在线| 欧美日韩国产123区| 天天色综合社区| 日韩欧美专区| 911精品国产一区二区在线| 色婷婷综合网站| 老司机精品视频网| 欧美精品粉嫩高潮一区二区| 国产亚洲视频一区| 大胆国模一区二区三区| 日韩视频123| zjzjzjzjzj亚洲女人| 国产精品一区二区中文字幕| 精品国产网站在线观看| 黄色污在线观看| 一区二区三区视频免费观看| 亚洲女成人图区| 亚洲黄色免费视频| 欧美激情国产在线| 欧美日韩999| 久久黄色免费视频| 亚洲一区二区免费看| 国产精品96久久久久久又黄又硬| 影音先锋国产资源| 国产制服丝袜一区| 国产精品v欧美精品v日韩| 天堂中文在线观看视频| 国产无遮挡一区二区三区毛片日本| 日本视频一区二区不卡| 久操视频在线播放| 午夜久久久久久| 亚洲色图38p| 欧美激情精品| 日韩高清欧美高清| 林心如三级全黄裸体| 97国产精品| 91国产在线精品| 一区二区国产欧美| 成人免费毛片片v| 日韩欧美激情一区二区| 久cao在线| 懂色av影视一区二区三区| 九热视频在线观看| 日韩亚洲精品在线观看| 精品亚洲永久免费精品| 中文字幕乱码av| 在线亚洲国产精品网站| 国产精品美女无圣光视频| 精品国自产拍在线观看| 国产日韩精品一区| 欧美久久在线观看| 日韩经典一区| 欧美sm极限捆绑bd| 国产一区在线观看免费| 亚洲激情另类| 国产在线高清精品| 日本私人网站在线观看| 亚洲日本在线观看| 视色视频在线观看| 亚洲黄色录像| 久久久久中文字幕2018| 一级黄色片免费| 久久亚洲二区三区| 热久久最新地址| 成人在线中文| 亚洲免费一级电影| 国产精品9191| 国产精品综合二区| 超碰成人在线免费观看| 向日葵视频成人app网址| 亚洲第一福利网站| 色婷婷在线视频观看| 奇米色777欧美一区二区| 精品国产乱码久久久久久88av| 理论片午午伦夜理片在线播放| 色欧美88888久久久久久影院| 亚洲一区二区三区四区av| 国产韩日影视精品| 国产精品视频地址| 国产高清一区在线观看| 欧美午夜激情小视频| 无码国产精品一区二区免费式直播 | 国产美女无遮挡永久免费| 国产欧美一二三区| 国产美女三级视频| 亚洲精品播放| 日韩av免费一区| 黄色片在线播放| 色激情天天射综合网| 大黑人交xxx极品hd| 国产精品久久国产愉拍| 久久国产一区二区| 亚洲欧洲美洲av| 亚洲人成网在线播放| 永久免费无码av网站在线观看| 99国产精品99久久久久久| 波多野结衣综合网| 欧美综合自拍| 欧洲成人在线视频| 精品亚洲成a人片在线观看| 色综合久久综合网97色综合 | 欧美另类在线播放| 国内老熟妇对白hdxxxx| 亚洲女子a中天字幕| 中文字幕制服丝袜| 99视频精品免费观看| 欧美色欧美亚洲另类七区| 欧美黄色三级| 久久精品国产一区二区电影| 国产不卡av在线播放| 一区二区三区色| 在线观看免费视频黄| 99精品99| 亚洲女人毛片| 欧洲大片精品免费永久看nba| 久久久久久久av| 亚洲av激情无码专区在线播放| 欧美日韩国产中文精品字幕自在自线| 国产精品jizz| 久久精品久久99精品久久| 路边理发店露脸熟妇泻火| 538任你躁精品视频网免费| 亚州国产精品久久久| 欧美美女搞黄| 91麻豆精品国产| 日韩av黄色片| 国产女人18毛片水真多成人如厕| 中文字幕第一页在线视频| 精品电影一区| 亚洲精品一品区二品区三品区| 国产一区二区三区国产精品| 久久免费精品日本久久中文字幕| 免费国产在线观看| 欧美一区二区视频网站| 亚洲精品国产精品乱码| 中文子幕无线码一区tr| 国产成人精品一区二区三区在线观看| 久久激情视频| 在线观看av的网址| 国产麻豆精品久久| 99精品欧美一区二区三区| 中文字幕在线中文字幕在线中三区| 深夜成人在线观看| 婷婷国产在线| 欧美日韩一区二区在线视频| www.av视频在线观看| 欧美国产日韩a欧美在线观看| 9191在线视频| 久久99精品久久久久| 欧美一区二区三区爽大粗免费| 99精品视频在线| 日本一区二区精品| 懂色av一区二区| 成人黄色网免费| 欧美黑人粗大| 国外成人在线直播| 老司机在线看片网av| 国产午夜精品美女视频明星a级| www男人的天堂| 欧美日韩mp4| 一级黄色免费网站| 性感美女久久精品| 手机在线免费看片| 亚洲国产精品成人综合色在线婷婷| 欧美在线一级片| 国产传媒日韩欧美成人| 免费一区二区三区在线观看| 国产色综合网| 日韩一级片免费视频| 欧美一区高清| 中文字幕一区二区三区5566| 久草成人在线| 欧美人与物videos另类| 风间由美中文字幕在线看视频国产欧美| 国产精品麻豆va在线播放| 国产精品一二三产区| 欧美激情一二三| 日韩免费影院| 大胆欧美人体视频| 精品美女在线观看视频在线观看| 国产亚洲精品91在线| 神马久久精品| 日韩经典第一页| 图片区 小说区 区 亚洲五月| 日韩精品自拍偷拍| 精品欧美一区二区精品少妇| 中文字幕日韩电影| 天天做天天爱天天高潮| 国内精品久久久久久久久电影网 | 黄色网zhan| 久久国产综合| 五月天久久综合网| 大色综合视频网站在线播放| 日韩高清av| 四虎国产精品免费观看| 亚洲一区二区四区| 97精品中文字幕| 影音欧美亚洲| 亚洲精品va| 成年人深夜视频| 在线免费观看欧美| 国产欧美在线一区| 肉丝袜脚交视频一区二区| 日韩精品无码一区二区三区免费| 久久免费国产| 校园春色 亚洲色图| 久久精品国产亚洲高清剧情介绍| 99国产精品久久久久久| 国产乱码一区二区三区| 韩国三级在线看| 99久久99久久精品国产片果冻 | 日韩aaa久久蜜桃av| 精品欧美一区二区在线观看视频| 亚洲美女15p| 日韩精品资源| 亚洲无中文字幕| 欧美变态另类刺激| 三级影片在线观看欧美日韩一区二区| 欧美黄色性生活| 国产麻豆一精品一av一免费| 韩国一区二区三区四区| 99久久免费视频.com| 亚洲理论片在线观看| 国产精品久久久一区麻豆最新章节| 三级影片在线看| 婷婷成人激情在线网| 久久久久久久久久成人| 欧美精品第1页| 亚洲 欧美 自拍偷拍| 色哟哟网站入口亚洲精品| 污视频免费在线观看| 2019日本中文字幕| 超碰国产精品一区二页| 国产一区精品在线| 久久一级电影| 337p粉嫩大胆噜噜噜鲁| 激情综合网最新| 久久福利小视频| 1区2区3区精品视频| 日本va欧美va国产激情| 在线成人av网站| 青青草观看免费视频在线 | 天堂av中文在线| 日韩免费在线视频| 一本一道久久a久久| 相泽南亚洲一区二区在线播放| 激情视频一区| 最新国产黄色网址| 91原创在线视频| 五月天丁香激情| 欧美天天综合网| 天天爱天天干天天操| 日韩中文字幕在线| 欧美二三四区| 国外成人在线视频网站| 97久久视频| 中文字幕第80页| 91美女蜜桃在线| 欧美日韩偷拍视频| 欧美老年两性高潮| 国产在线观看网站| 81精品国产乱码久久久久久| 亚洲精品一二三**| 最新中文字幕久久| 麻豆91在线播放免费| 白丝女仆被免费网站| 亚洲一卡二卡三卡四卡| 国产人妻精品一区二区三| 国产午夜精品视频| 欧美性猛交xxx高清大费中文| 国产精品久久久久久久小唯西川| 久久精品影视| av在线免费看片| 国产精品久久久久久久久免费丝袜 | 亚洲人成色777777老人头| 久久国内精品一国内精品| 91精品影视| 日本中文不卡| 日日夜夜精品免费视频| 成人精品999| 色综合久久88色综合天天6| 手机看片一区二区| 8050国产精品久久久久久| 免费看久久久| 久久久久久久中文| www久久久久| 800av免费在线观看| 日韩高清有码在线| 自拍偷拍欧美视频| 欧美成熟毛茸茸复古| 亚洲综合国产激情另类一区| 在线免费观看黄色小视频| 欧美性猛交丰臀xxxxx网站| 色播色播色播色播色播在线| 91精品国产免费久久久久久| 欧美自拍视频| 精品免费国产一区二区| 国产清纯在线一区二区www| 五月天中文字幕| 日韩在线视频观看正片免费网站| 国产精品天堂蜜av在线播放| 亚洲人成网站在线播放2019| 久久se精品一区二区| 国产a免费视频| 亚洲精品一线二线三线无人区| 爱情岛亚洲播放路线| 久久久综合亚洲91久久98| 久久综合导航| 超碰97av在线| 欧美一级欧美一级在线播放| 波多野结依一区| 欧美一区二区综合| 六月丁香婷婷久久| 精国产品一区二区三区a片| 亚洲第一视频在线观看| 黄色成人免费网| 水蜜桃一区二区三区| 国产一区二区三区在线观看免费视频| 麻豆changesxxx国产| 日韩高清免费在线| 日韩精品第二页| 色欲色香天天天综合网www| 久久久久综合网| 国产又爽又黄免费软件| 久久青草福利网站| 欧美色图国产精品| 韩国av中国字幕| 91久久精品一区二区三| 国产精品扒开做爽爽爽的视频| 国产精品免费在线播放| 日日摸夜夜添夜夜添国产精品| 五月综合色婷婷| 日韩精品高清在线观看| 欧美91在线|欧美| 每日在线观看av| 国产精品三级电影| 午夜视频在线播放| 亚洲自拍偷拍第一页| 亚洲综合精品四区| 超碰在线国产97|