广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue拖拽添加的简单实现
  • 792
分享到

vue拖拽添加的简单实现

2024-04-02 19:04:59 792人浏览 泡泡鱼
摘要

本文主要介绍了Vue拖拽添加的简单实现,具体如下: 效果图 并没有判断是否重复,没有删除旧数据 数据体 <MyShuttle :dataOrigin='[

本文主要介绍了Vue拖拽添加的简单实现,具体如下:

效果图

并没有判断是否重复,没有删除旧数据

数据体


 <MyShuttle :dataOrigin='[
          {
            Name:"数据001",
            Id:"数001",
          },
          {
            Name:"数据002",
            Id:"数001",
          },
          {
            Name:"数据003",
            Id:"数001",
          }]' 
          
      :space='[{
            Name:"右001",
            Id:"右001",
            }]' />

代码

draggable开启可拖动


@dragenter.prevent @draGover.prevent
// 阻止浏览器默认行为,不然会显示一个叉叉,不好看

阻止默认行为


@dragleave.stop=“dragleave($event, ‘main')”

进入离开当前元素都会触发


@dragend.stop=“dragEnd($event, item)”

放下拖拽内容触发

拖拽事件和属性

标记 这个很重要!!! 这个决定了拖拽事件的行为。当点击开始拖拽之后,鼠标点击所在的位置就是标记。
dragstart:当单击下鼠标,并移动之后执行。
drag:在dragstart执行之后,鼠标在移动时连续触发。
dragend:当拖拽行为结束,也就是松开鼠标的时候触发。
dragenter:当正在拖拽的元素的标记进入某个Dom元素时触发,自身首先会触发。被进入的Dom元素会触发这个事件。
dragover:当拖拽的元素的标记在进入的Dom元素上移动时触发,在自身移动时也会触发。
dragleave:当拖拽的元素在离开进入的Dom时触发。

H5拖拽属性 draggable

draggable:当需要某个元素可以拖拽时,需设置为true,默认为false。选中的文本、图片、链接默认可以拖拽。
DataTransfer对象:该属性用于保存拖放的数据和交互信息,该组件没有使用到,暂忽略。

当鼠标移动到目标div盒子才会追加,简单的才最能说明问题


<template>
  <div class="MyShuttle">
    <div class="MyShuttleLeft">
      <div class="title">数据源</div>
      <div class="dataBox" @dragleave.stop="dragleave($event, 'main')">
        <div v-for="(item, i) in dataOrigin" :key="i" class="dataList" draggable @dragenter.prevent
          @dragover.prevent @dragstart.stop="dragstart($event, item)"
          @dragend.stop="dragEnd($event, item)">
          {{ item.Name}}
        </div>
      </div>
    </div>
    <div class="MyShuttleCenter"></div>
    <div class="MyShuttleRight">
      <div class="title">数据源</div>
      <div ref="MyShuttleRight" class="dataBox">
        <div v-for="(item, i) in spaceList" :key="i" class="dataList" draggable @dragenter.prevent
          @dragover.prevent>
          {{ item.Name}}
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: '',
  components: {},
  props: {
    dataOrigin: {
      type: Array
    },
    space: {
      type: Array
    }
  },
  data() {
    return {
      spaceList: this.space,
      isDragStatus: false
    }
  },
  computed: {},
  watch: {},
  created() { },
  mounted() { },
  methods: {
    dragleave(e, item) {
      // console.log(e, item)
      if (item === 'main') {
        this.isDragStatus = true
      } else {
        this.isDragStatus = false
      }
      // console.log(this.isDragStatus)
    },
    dragstart(e, item) {
      // console.log(e, item)
    },
    dragEnd(e, item) {
      const top = this.$refs.MyShuttleRight.getBoundinGClientRect().top
      const right = this.$refs.MyShuttleRight.getBoundingClientRect().right
      const bottom = this.$refs.MyShuttleRight.getBoundingClientRect().bottom
      const left = this.$refs.MyShuttleRight.getBoundingClientRect().left
      console.log(top, right, bottom, left)
      console.log(e.clientX, e.clientY, item)
      if (this.isDragStatus && e.clientY > top && e.clientY < bottom && e.clientX > left && e.clientX < right) {
        this.spaceList.push(item)
        console.log(this.spaceList.indexOf(item))
      }
    }
  }
}
</script>

<style scoped lang="sCSS">
.MyShuttle {
  width: 100%;
  height: 308px;

  display: flex;
  justify-content: space-between;
  // 左右盒子公共样式
  .MyShuttleLeft,
  .MyShuttleRight {
    border: 1px solid #DDDddd;
    border-collapse: collapse;
    .title {
      box-sizing: border-box;
      width: 100%;
      height: 40px;
      background: #f5f5f5;
      border-radius: 4px 4px 0px 0px;
      border-bottom: 1px solid #dddddd;
      padding: 10px 16px;
      font-size: 14px;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
      color: #333333;
      line-height: 20px;
    }
    .dataBox {
      width: 100%;
      height: 228px;
      overflow: auto;
      padding: 6px 0;
      .dataList {
        width: 96%;
        height: 40px;
        box-sizing: border-box;
        font-size: 14px;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #666;
        line-height: 20px;
        margin: 0 2% 10px;
        padding: 10px 16px;
        border: 1px solid #ddd;
        border-radius: 4px;
        user-select: none;
        cursor: pointer;
        &:hover {
          color: #01bc77;
          background: rgba(1, 188, 119, 0.1);
        }
      }
    }
  }
  .MyShuttleLeft {
    width: 362px;
    height: 100%;
    background: #ffffff;
    border-radius: 4px;
  }
  .MyShuttleCenter {
    width: 64px;
    height: 100%;
  }
  .MyShuttleRight {
    width: 362px;
    height: 100%;
    background: #ffffff;
    border-radius: 4px;
  }
}
</style>

到此这篇关于vue拖拽添加的简单实现的文章就介绍到这了,更多相关vue拖拽添加内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网! 

--结束END--

本文标题: vue拖拽添加的简单实现

本文链接: https://www.lsjlt.com/news/161356.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue拖拽添加的简单实现
    本文主要介绍了vue拖拽添加的简单实现,具体如下: 效果图 并没有判断是否重复,没有删除旧数据 数据体 <MyShuttle :dataOrigin='[ ...
    99+
    2022-11-12
  • vue如何实现拖拽添加
    这篇文章主要为大家展示了“vue如何实现拖拽添加”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现拖拽添加”这篇文章吧。效果图并没有判断是否重复,没有删除旧数据数据体 <...
    99+
    2023-06-22
  • js实现简单的拖拽效果
    本文实例为大家分享了js实现简单的拖拽效果的具体代码,供大家参考,具体内容如下 1.拖拽的基本效果 思路: 鼠标在盒子上按下时,准备移动 (事件加给物体) 鼠标移动时,盒子跟随鼠标移...
    99+
    2022-11-12
  • react实现简单的拖拽功能
    本文实例为大家分享了react实现简单的拖拽功能的具体代码,供大家参考,具体内容如下 src文件夹下新建文件夹demo  然后在创建两个文件js和css demo.js文...
    99+
    2022-11-13
  • JavaScript实现简单的拖拽效果
    本文实例为大家分享了JavaScript实现简单的拖拽效果的具体代码,供大家参考,具体内容如下 1.先搭架子: * { margin: 0; ...
    99+
    2022-11-12
  • JavaScript实现简单拖拽效果
    本文实例为大家分享了JavaScript实现简单拖拽效果的具体代码,供大家参考,具体内容如下 先看实现的效果: 思路:里面用到了三个事件,鼠标按下、移动、松开事件 那么首先创建盒子...
    99+
    2022-11-12
  • JavaScript实现拖拽简单效果
    本文实例为大家分享了JavaScript实现拖拽效果的具体代码,供大家参考,具体内容如下 1.1 拖拽的基本效果 思路: 鼠标在盒子上按下时,准备移动 (事件加给物体) 鼠标移动时,...
    99+
    2022-11-12
  • vuedraggable实现简单拖拽功能
    本文实例为大家分享了vuedraggable实现拖拽功能的具体代码,供大家参考,具体内容如下 一、下载依赖 npm i -S vuedraggable 二、代码块 <templ...
    99+
    2022-11-13
  • Android简单实现菜单拖拽排序的功能
    目录1、效果2、简介3、功能拆解4、功能实现4.1、实现接口4.1.1、getMovementFlags4.1.2、onMove4.1.3、onSwiped4.2、绑定Recycle...
    99+
    2022-11-13
  • 怎么用JavaScript实现简单的拖拽效果
    这篇文章主要介绍“怎么用JavaScript实现简单的拖拽效果”,在日常操作中,相信很多人在怎么用JavaScript实现简单的拖拽效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用JavaScript...
    99+
    2023-06-25
  • PHP实现的拖拽图形验证,简单易用!
    最近看到一些拖拽验证码的帖子,本着好奇和研究学习的态度简单实现了第一版的 拖拽验证项目地址:github.com/RLOFLS/drag-captcha示例逻辑:apiphp Draggenerate() 生成渲染数据 dst, front...
    99+
    2022-08-08
    验证码 php
  • JS 简单实现拖拽评星的示例代码
    目录一、实现效果二、总结与思考废话开篇:通过 canvas 简单拖拽评星,主要是通过个人的理解去实现这样的一个效果。 一、实现效果 html <div class="main"...
    99+
    2023-05-19
    JS 拖拽评星 JS 评星
  • vue实现可拖拽的dialog弹框
    本文主要介绍了vue实现可拖拽的dialog弹框,分享给大家,具体如下: element的dialog弹框在项目中挺常用的。但有时候嵌套的话会遮住,体验不好。拖拽形式的弹框会提高用...
    99+
    2022-11-12
  • 如何使用Vue实现一个简单的鼠标拖拽滚动效果插件
    这篇文章主要介绍了如何使用Vue实现一个简单的鼠标拖拽滚动效果插件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 演示事例最近在做...
    99+
    2022-10-19
  • typescript+react实现移动端和PC端简单拖拽效果
    本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下 一、移动端 1.tsx代码 import { Compon...
    99+
    2022-11-12
  • vue实现拖拽进度条的方法
    本文将为大家详细介绍“vue实现拖拽进度条的方法”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“vue实现拖拽进度条的方法”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧...
    99+
    2023-06-06
  • Vue实现可拖拽组件的方法
    本文为大家分享了Vue实现可拖拽、拖拽组件,供大家参考,具体内容如下 描述: 组件仅封装拖拽功能,内容通过#header、#default、#footer插槽 自定义 效果:&nbs...
    99+
    2022-11-12
  • vue实现可拖拽div大小的方法
    下面看下vue中可拖拽div大小的方法。 可封装为全局方法在项目中所需要地方直接调用(mixins) 方法: 参数: 1.allBox:最外层第div class;2.leftBox...
    99+
    2022-11-13
  • vue如何实现可拖拽的dialog弹框
    这篇文章主要介绍了vue如何实现可拖拽的dialog弹框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:element的dialog弹框在项目中挺常用的。但有时候嵌套...
    99+
    2023-06-15
  • Vue拖动截图功能的简单实现方法
    拖动鼠标进行页面截图(也可指定区域拖动截图) 一、安装html2canvas、vue-cropper npm i html2canvas --save //用于...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作