vue 拖拽div

不知道你们有没有这样的首页,一块一块是装在div里,类似于下图(公司项目打码了)写的各色的样式,现在需要将他们可以拖动挪动位置,

查阅了一些资料,必须得放在数组里面才可以实现,于是我就将这些div,封装了几个组件

然后引入组件

import indexCard1 from "@/views/indexCard/1.vue";
import indexCard2 from "@/views/indexCard/2.vue";
import indexCard3 from "@/views/indexCard/3.vue";
import indexCard4 from "@/views/indexCard/4.vue";
import indexCard5 from "@/views/indexCard/5.vue";
import indexCard6 from "@/views/indexCard/6.vue";
import indexCard7 from "@/views/indexCard/7.vue";
import indexCard8 from "@/views/indexCard/8.vue";

 在使用的页面注册组件,就可以了

export default {
  components: {
    indexCard1,
    indexCard2,
    indexCard3,
    indexCard4,
    indexCard5,
    indexCard6,
    indexCard7,
    indexCard8
  },
}

我先是展示出来,证明我的引入没有问题

首先安装依赖

npm i -S vuedraggable

在使用的页面引入依赖

import draggable from "vuedraggable";

因为要存放到数组里面,所以就不能如我上面所写,

  data() {
    return {    
 disabledDrag: false, //默认开启拖拽 
   contentItems: [
        { lable: "1", value: indexCard1 },
        { lable: "2", value: indexCard2 },
        { lable: "3", value: indexCard3 },
        { lable: "4", value: indexCard4 },
        { lable: "5", value: indexCard5 },
        { lable: "6", value: indexCard6 },
        { lable: "7", value: indexCard7 },
        { lable: "8", value: indexCard8 },
      ],
         }
      }

value里面放的就是组件,然后去遍历组件;
 

  <div class="app-container home">
    <el-row :gutter="20">
      <draggable
        v-model="contentItems"
        chosen-class="chosen"
        force-fallback="true"
        group="itxst"
        :disabled="disabledDrag"
        animation="1000"
      >
        <transition-group>
          <el-col :span="12" v-for="(item, index) in contentItems" :key="index">
            <component :is="item.value"></component>
          </el-col>
        </transition-group>
      </draggable>
    </el-row>
  </div>

因为我是想要一排展示两个,所以用了row和col,如果没有要求吧col换成div就可以啦,需要注意的是draggable里面不可以放row

现在就实现了想要随意移动装满内容的div盒子啦

最终效果图:

 

Vue.js本身并不是一个直接支持HTML元素拖拽功能的库,但是你可以通过第三方插件如`vue-draggable`或者`vuedraggable`来轻松实现这个功能。以下是一个简单的步骤: 1. 安装插件:首先你需要在项目中安装`vue-draggable`,可以使用npm或yarn进行安装: ```bash npm install vue-draggable # 或者 yarn add vue-draggable ``` 2. 在组件中引入并使用:在Vue文件中导入`vuedraggable`,并在需要拖拽div上应用这个属性: ```html <template> <draggable v-model="items" :options="{ group: 'people', draggable: '.draggable-element' }"> <div class="draggable-element" v-for="(item, index) in items" :key="index"> {{ item.name }} </div> </draggable> </template> <script> import draggable from "vuedraggable"; export default { components: { draggable }, data() { return { items: [ { name: "Item 1", position: { x: 0, y: 0 } }, // 更多元素... ] }; } }; </script> ``` 在这个例子中,`.draggable-element`是你需要可以被拖动的元素的选择器,`group`属性用于指定哪些元素可以互相拖拽,`position`数据绑定到每个元素上,以便跟踪它们的位置。 3. 监听事件:`vuedraggable`会触发一些事件,如`start`、`end`等,你可以监听这些事件以处理拖拽过程中的各种操作。 ```javascript <script> // ... methods: { onDragEnd(e) { const draggedItem = e.item; this.$set(this.items, draggedItem.index, { ...draggedItem, position: { x: e.x, y: e.y } }); } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值