vue使用全局指令实现左右拖拽调整元素宽度

1.main.js:

import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)

const draggableObj = {
  mounted(el, binding, vnode) {
    let xOffset = 0;
    let yOffset = 0;
    el.style.width = binding.value + 'px';
    const handleMouseDown = (event) => {
      xOffset = event.clientX;
      yOffset = event.clientY;
      document.addEventListener('mousemove', handleMouseMove);
      document.addEventListener('mouseup', handleMouseUp);
    };

    const handleMouseMove = (event) => {
      const currentX = event.clientX;
      const currentY = event.clientY;

      const dx = currentX - xOffset;
      const dy = currentY - yOffset;

      el.style.width = binding.value + dx + 'px';
      \\同理,高度也是一样,修改el.style.height即可
    };

    const handleMouseUp = () => {
      binding.value = el.offsetWidth;
      document.removeEventListener('mousemove', handleMouseMove);
      document.removeEventListener('mouseup', handleMouseUp);
    };

    el.querySelector('.drag-handle').addEventListener('mousedown', handleMouseDown);
  },
}
//v-draggable
app.directive('draggable', draggableObj)

app.mount('#app')



2.使用:

<div v-draggable="data.width">
</div>

<script>
import { ref, reactive } from "vue";
const data = reactive({
    width:400,//表示要拖拽元素的初始宽度
})

</script>

同理,高度也是一样,修改el.style.height即可,这里我的需求不用拖拽高度就没演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值