热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue可以拖动的布局,vue实现拖拽可视化

vue可以拖动的布局,vue实现拖拽可视化本文主要介绍如何使用vu

  vue可以拖动的布局,vue实现拖拽可视化

  本文主要介绍如何使用vue.js实现拖放功能。本文没有使用现有的库,而是使用内置的HTML拖放API来实现一个简单的拖放系统。有需要的朋友可以参考一下。

  

前言

  添加拖放功能是让你的程序更加自然友好的一种方式。虽然有一些库提供了拖放功能,但是了解它们在底层是如何工作的还是很有意义的。

  在本文中,我们将使用内置的HTML拖放API来实现一个简单的拖放系统。像这样:

  

拖放API

  HTML拖放API是一个内置的方法。它包含几个事件和属性,但可以总结为两种类型的元素。

  可拖动元素:可以拖动的元素。

  可放置元素:可以接受被拖动元素的元素。

  如果以这种方式分析,将更容易分析拖放事件。

  拖放事件

  API中有八个拖放事件可以在我们的程序中使用。

  拖动:可拖动的项目被拖动。

  Dragstart:开始拖动可拖动元素。

  拖动结束:拖动结束(例如释放鼠标)

  Dragenter:被拖动的项目进入可放置的元素。

  drag leave可拖动的项目会留下可放置的元素。

  Dragover:拖动项目在可放置的元素上移动(大约每100毫秒调用一次)

  拖放:一个可拖动的项目被放置在一个可放置的元素上。

  dataTransfer对象

  关于拖放API的一个最重要的知识点是,它将dataTransfer对象添加到事件中。

  DataTransfer对象允许我们在开始拖动元素时设置数据,并在将元素放入拖放区时访问相同的数据。

  我们应该了解一些关于dataTransfer的属性和方法(如果想了解更多,请查看dataTransfer API文档)。

  DropEffect:当前的拖放操作(例如,移动、复制)

  effectAllowed:指定拖放操作。

  SetData(name,val):允许我们向dataTransfer对象添加值。

  GetData(name):检索存储的值。

  

创建自己的拖放系统

  如您所见,示例中有两个列表,我们可以在它们之间平稳地拖放项目。

  配置我们的项目

  首先,我们要设置数据。在脚本中,创建一个具有以下属性的item对象数组:

  Id:唯一的ID,以便我们可以找到对象

  标题:要显示的文本

  列表:它所属的列表。

  我决定在这个数组中添加三个项目:

  data () {

  返回{

  项目:[

  {

  id: 0,

  标题: A项,

  列表:1

  },

  {

  id: 1,

  标题:“B项”,

  列表:1

  },

  {

  id: 2,

  标题:“C项”,

  列表:2

  }]

  }

  }

  此外,还创建了两个计算属性来将项目列表过滤为列表1中的项目和列表2中的项目。

  计算值:{

  listOne () {

  返回this . items . filter(item=item . list===1)

  },

  listTwo () {

  返回this . items . filter(item=item . list===2)

  }

  }

  创建计算属性比在v-for中使用v-if更好。

  创建的模板代码

  这是组件的轮廓。代码将显示所有内容,但没有拖放功能。

  模板

  差异

  div class=拖放区

   div v-for= listOne中的项目:key=item.title class=drag-el

  {{ item.title }}

  /div

  /div

  div class=拖放区

   div v-for= list two中的项目:key=item.title class=drag-el

  {{ item.title }}

  /div

  /div

  /div

  /模板

  组件的样式并不重要。重要的是,即使没有内部元素,你的拖放区也必须有一定的高度,否则,你不能把鼠标悬停在上面!

  样式范围。拖放区{

  背景色:# eee

  边距-底部:10px

  填充:10px

  }。拖曳-el {

  背景色:# fff

  边距-底部:10px

  填充:5px

  }

  /风格

  这是通过向拖放区样式添加一些填充来实现的。

  添加拖放功能

  首先,在脚本中添加一些方法:一个在开始拖动元素时使用,另一个在拖放元素时使用。

  对于startDrag方法,我们希望使用前面讨论的dataTransfer属性来存储要拖动的元素的ID。此外,这个拖动事件将是一个动作。

  startDrag: (evt,item)={

  evt . data transfer . drop effect= move

  evt . data transfer . effect allowed= move

  evt . data transfer . setdata( itemID ,item.id)

  }

  然后在ondrop中检索存储的ID,以便我们可以访问数组中的正确项目。

  onDrop (evt,list) {

  const itemID=evt . data transfer . get data( itemID )

  const item=this . items . find(item=item . id==itemID)

  item.list=list

  }

  添加下面的模板代码。

  首先,向事件添加一个事件。使所需的元素可拖动,并检测拖动开始事件。

  差异

  拖拉,拖拉

  v-for= list two中的项目

  :key=item.title

  可拖动的

  @dragstart=startDrag($event,item)

  {{ item.title }}

  /div

  得益于draggable属性的加入,如果运行程序,应该可以像这样拖动元素,但是不能拖动到任何地方。

  让我们给它一个接受可拖动元素的拖放区。添加一个首先调用onDrop方法的drop事件侦听器。

  差异

  空投区

  @drop=onDrop($event,1)

  但是注意,我们必须在拖放挂钩、dragEnter和dragOver上调用preventDefault。

  因为默认情况下,这两种方法都不允许删除元素。因此,为了使我们的drop事件正常工作,我们必须防止它的默认操作。

  你可以通过Vue的内置来实现。防止事件修饰符。

  差异

  空投区

  @drop=onDrop($event,1)

  @dragover.prevent

  @dragenter.prevent

  现在运行程序,你可以看到一切正常。我们能够在两个不同的列表之间拖放元素。

  

总结

  虽然这个例子非常简单,但是它可以帮助你理解HTML拖放API是如何工作的。其实没你想的那么难。

  关于如何使用vue.js实现拖拽功能的这篇文章到此为止。关于vue.js拖放功能的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!



推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
author-avatar
daniel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有