vue 拖拽改变宽度

<template>
  <div class="x-handle" unselectable="on" onselectstart="return false" @mousedown="mouseDown"></div>
</template>

<script>
export default {
  name: 'XDragHandle',
  data() {
    return {
      lastX: '',
    }
  },
  created() {
    document.addEventListener('mouseup', this.mouseUp)
  },
  destroyed() {
    document.removeEventListener('mouseup', this.mouseUp)
  },
  methods: {
    mouseUp() {
      this.lastX = ''
      document.removeEventListener('mousemove', this.mouseMove)
    },
    mouseDown(event) {
      document.addEventListener('mousemove', this.mouseMove)
      this.lastX = event.screenX
    },
    mouseMove(event) {
      console.log('move')
      this.$emit('widthChange', this.lastX - event.screenX)
      this.lastX = event.screenX
    },
  },
}
</script>

<style lang="scss" scoped>
.x-handle {
  width: 2px;
  cursor: w-resize;
  z-index: 10;
  background-color: #f1f4f9;
}
</style>

 

Vue3 中实现组件的点击拖拽改变宽度,我们可以借助一些现成的第三方库,如 `vue-draggable`。以下是简单的步骤: 1. 安装依赖:首先需要安装 `vue-draggable`,你可以使用npm或yarn来安装: ```bash npm install vue-draggable # 或者 yarn add vue-draggable ``` 2. 引入并配置组件:在你的组件中引入并配置 `vue-draggable` 组件,例如: ```html <template> <draggable :list="items" :options="{ dragging: isDragging, group: 'group'}" @start="handleStart" @end="handleEnd" > <div v-for="(item, index) in items" :key="index" :style="{ width: item.width + 'px' }"> {{ item.text }} <span @mousedown="dragStart(index)" style="cursor: grab;"> </span> </div> </draggable> </template> ``` 3. 编写数据和方法: ```js <script> import draggable from 'vue-draggable'; export default { components: { draggable, }, data() { return { items: [ { text: 'Item 1', width: 100 }, // ... 其他项 ], isDragging: false, }; }, methods: { dragStart(index) { this.isDragging = true; this.handleDragStart(index); }, handleStart(event, index) { this.$set(this.items, index, { ...this.items[index], width: null }); event.dataTransfer.setData('index', index); }, handleEnd(event, index) { this.isDragging = false; const draggedItem = this.items[index]; this.handleDragged(draggedItem, index); event.preventDefault(); }, handleDragged(item, index) { // 更新实际宽度和视图 this.items[index].width = event.clientX - this.$el.getBoundingClientRect().left; this.$forceUpdate(); }, }, }; </script> ``` 4. 拖动开始和结束时的回调函数负责处理拖拽过程中的细节和更新状态。 注意这只是一个基础示例,实际应用可能还需要考虑边界限制、拖拽方向控制等问题。如果你对动画有特殊需求,还可以配合 CSS3 动画进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值