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

基于Vue.js 實(shí)現(xiàn)簡(jiǎn)易拖拽指令

 更新時(shí)間:2024年04月02日 14:28:23   作者:林間有風(fēng)H  
在 Vue.js 中,我們可以通過(guò)自定義指令的方式來(lái)實(shí)現(xiàn)拖拽功能,使得代碼更加模塊化和可復(fù)用,本文將介紹如何基于 Vue.js 實(shí)現(xiàn)一個(gè)簡(jiǎn)易的拖拽指令,感興趣的朋友跟隨小編一起看看吧

基于 Vue.js 實(shí)現(xiàn)簡(jiǎn)易拖拽指令

在 Web 開發(fā)中,拖拽功能是一項(xiàng)常見而又實(shí)用的功能。無(wú)論是制作網(wǎng)頁(yè)游戲、實(shí)現(xiàn)可拖拽的組件,還是簡(jiǎn)單的頁(yè)面布局調(diào)整,都可能用到拖拽功能。在 Vue.js 中,我們可以通過(guò)自定義指令的方式來(lái)實(shí)現(xiàn)拖拽功能,使得代碼更加模塊化和可復(fù)用。本文將介紹如何基于 Vue.js 實(shí)現(xiàn)一個(gè)簡(jiǎn)易的拖拽指令。

1. 簡(jiǎn)介

拖拽功能的實(shí)現(xiàn)原理主要是通過(guò)鼠標(biāo)事件(mousedown、mousemove、mouseup)來(lái)控制被拖拽元素的位置。我們需要監(jiān)聽鼠標(biāo)按下事件,計(jì)算鼠標(biāo)按下位置與被拖拽元素的偏移量,然后在鼠標(biāo)移動(dòng)事件中根據(jù)鼠標(biāo)位置不斷更新被拖拽元素的位置,最后在鼠標(biāo)抬起事件中清除事件監(jiān)聽器。

2. 實(shí)現(xiàn)

我們首先定義一個(gè) Vue 指令,命名為 drag。指令的作用是使元素可拖拽。

function updateElVisible(el, binding) {
    el.style.cursor = 'move';
    el.onmousedown = function (e) {
        const disx = e.pageX - el.offsetLeft;
        const disy = e.pageY - el.offsetTop;
        const maxX = document.body.clientWidth - parseInt(window.getComputedStyle(el).width);
        const maxY = document.body.clientHeight - parseInt(window.getComputedStyle(el).height);
        document.onmousemove = function (e) {
            let x = e.pageX - disx;
            let y = e.pageY - disy;
            x = Math.min(Math.max(x, 0), maxX);
            y = Math.min(Math.max(y, 0), maxY);
            console.log(x,'xx')
            el.style.left = x + 'px';
            el.style.top = y + 'px';
        };
        document.onmouseup = function () {
            document.onmousemove = document.onmouseup = null;
        };
    };
}
const hasDrag = {
    mounted(el, binding) {
        updateElVisible(el, binding);
    },
    beforeUpdate(el, binding) {
        updateElVisible(el, binding);
    }
};
export default  {
    install(Vue) {
         Vue.directive('drag', hasDrag);
    }
};

3. 使用方法

在 Vue 組件中使用 v-drag 指令即可使元素可拖拽。

main.js
import DragDirective from './utils/drag'
.....
app.use(DragDirective)
<template>
  <div v-drag style="width: 100px; height: 100px; background-color: #f0f0f0; position: absolute; left: 0; top: 0;">
    拖拽我
  </div>
</template>

4. 總結(jié)

通過(guò)自定義指令實(shí)現(xiàn)拖拽功能,可以有效地將拖拽邏輯與組件邏輯分離,使得代碼更加清晰和易于維護(hù)。但是需要注意的是,拖拽功能的實(shí)現(xiàn)涉及到一些 DOM 操作,需要謹(jǐn)慎處理,以免引發(fā)意外的副作用。

希望本文對(duì)你理解如何在 Vue.js 中實(shí)現(xiàn)拖拽功能有所幫助!

到此這篇關(guān)于基于Vue.js 實(shí)現(xiàn)簡(jiǎn)易拖拽指令的文章就介紹到這了,更多相關(guān)Vue.js 拖拽指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3.0語(yǔ)法糖內(nèi)的defineProps及defineEmits解析

    vue3.0語(yǔ)法糖內(nèi)的defineProps及defineEmits解析

    這篇文章主要介紹了vue3.0語(yǔ)法糖內(nèi)的defineProps及defineEmits解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue proxyTable配置多個(gè)接口地址,解決跨域的問(wèn)題

    Vue proxyTable配置多個(gè)接口地址,解決跨域的問(wèn)題

    這篇文章主要介紹了Vue proxyTable配置多個(gè)接口地址,解決跨域的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue項(xiàng)目打包優(yōu)化方式(讓打包的js文件變小)

    vue項(xiàng)目打包優(yōu)化方式(讓打包的js文件變小)

    這篇文章主要介紹了vue項(xiàng)目打包優(yōu)化方式(讓打包的js文件變小),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3中同時(shí)定義多個(gè)插槽的實(shí)現(xiàn)示例

    Vue3中同時(shí)定義多個(gè)插槽的實(shí)現(xiàn)示例

    本文主要介紹了Vue3中同時(shí)定義多個(gè)插槽的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 基于Vue實(shí)現(xiàn)拖拽功能

    基于Vue實(shí)現(xiàn)拖拽功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)拖拽功能,拖動(dòng)方塊進(jìn)行移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解Vuex中g(shù)etters的使用教程

    詳解Vuex中g(shù)etters的使用教程

    在Store倉(cāng)庫(kù)里,state就是用來(lái)存放數(shù)據(jù)。如果很多組件都使用這個(gè)過(guò)濾后的數(shù)據(jù),我們是否可以把這個(gè)數(shù)據(jù)抽提出來(lái)共享?這就是getters存在的意義。我們可以認(rèn)為,getters是store的計(jì)算屬性。本文將具體介紹一下getters的使用教程,需要的可以參考一下
    2022-01-01
  • vue+xlsx實(shí)現(xiàn)表格導(dǎo)出進(jìn)度提示功能

    vue+xlsx實(shí)現(xiàn)表格導(dǎo)出進(jìn)度提示功能

    這篇文章主要為大家詳細(xì)介紹了vue如何結(jié)合ant-design和xlsx 實(shí)現(xiàn)表格導(dǎo)出進(jìn)度提示功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-05-05
  • Vue如何比較字符串變化并高亮變化的部分

    Vue如何比較字符串變化并高亮變化的部分

    這篇文章主要介紹了Vue如何比較字符串變化并高亮變化的部分問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 前端儲(chǔ)存之localStrage、sessionStrage和Vuex使用

    前端儲(chǔ)存之localStrage、sessionStrage和Vuex使用

    localStorage、sessionStorage和Vuex是三種不同的客戶端存儲(chǔ)方式,用于在瀏覽器中保存數(shù)據(jù),localStorage和sessionStorage都是以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),但localStorage存儲(chǔ)的數(shù)據(jù)在關(guān)閉瀏覽器后仍然存在
    2025-01-01
  • vue3實(shí)現(xiàn)自定義導(dǎo)航菜單的示例代碼

    vue3實(shí)現(xiàn)自定義導(dǎo)航菜單的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用vue3實(shí)現(xiàn)自定義導(dǎo)航菜單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11

最新評(píng)論

武陟县| 杨浦区| 化德县| 青川县| 前郭尔| 盘锦市| 南宫市| 华安县| 高邮市| 彩票| 伊宁市| 华阴市| 雅江县| 耒阳市| 宣城市| 金华市| 洪洞县| 习水县| 夏邑县| 南投县| 宜宾市| 南陵县| 河间市| 清新县| 塘沽区| 英山县| 巍山| 邹平县| 五原县| 通山县| 武威市| 湖南省| 沙湾县| 徐州市| 平乐县| 司法| 政和县| 岑溪市| 泸西县| 石柱| 嘉兴市|