dragstart之后立即触发Javascript dragend事件

问题描述 投票:0回答:1

我有一个重要的错误正在给我造成很多伤害。

我已经在Vue中完成了表单生成器组件。

它是由可拖动区域组成的,具有可拖动项目且外观友好:短答案,长答案,数字答案,单选框/复选框答案...

还有一个放置区域,我可以在其中放置这些可拖动的项目,以便将其推送到对象并组成表单预览。

这是我最终目标的一些介绍。一切正常,但任何事件我都没问题……可拖动区域中有一个错误。有时,我无法建立定义正在发生的事情的路径。有时,我重复一遍,当我开始拖动并且触发了dragstart事件(在该事件中放置了console.log)时,在按下主按钮的同时立即触发了dragend事件(我也看到了该事件我在dragend处理程序中输入的console.log。)>

我无法复制它。而且,它不介意我从可拖动区域中拖动哪种字段类型。我已经看到有一个Chrome错误,但已修复(我认为!)。

我的Chrome版本为:版本78.0.3904.108(正式版本)(64位)

,而以前的版本存在问题(我想重复)。

我将显示我在做什么的伪代码。

DraggableArea.vue

<template lang='pug'>
  #draggable-area
    ul
      draggable-item(
        v-for='draggableField in draggableFields'
        :fieldInfoToBeDropped='draggableField.fieldInfoToBeDropped'
      )

</template>

DraggableItem.vue

<template lang='pug'>
  li(
    draggable='true'
    @dragstart.stop='handleDragstart'
    @dragend.stop='handleDragend'
    @drop.stop='handleDrop
</template>

export default {
  ...

  methods: {
    handleDragstart(e) {
      const fieldInfoToBeDropped = this.fieldInfoToBeDropped // this is an object which contains the information that drop zone will handle to create the field in the form object
      try {
        console.log('DraggableItem, handleDragstart event:', e)
        setTimeout(() => { this.$el.classList.add('drag') }, 10)
        e.dataTransfer.clearData()
        const fieldObjectStr = JSON.stringify(fieldInfoToBeDropped)
        e.dataTransfer.setData('fieldObject', fieldObjectStr)
      } catch (err) {
        console.log('DraggableItem, handleDragstart error:', err)
        this.$el.classList.remove('drag')
        e.dataTransfer.clearData()
        e.preventDefault()
      }
    },

    handleDragend(e) {
      console.log('DraggableItem: dragend fires')
      this.$el.classList.remove('drag')
      e.dataTransfer.clearData()
    },

    handleDrop(e) {
      this.handleDragend(e)
    }

  }

fieldInfoToBeDropped的示例。它更改了id(动态生成的id,componentType和iconName)。

{
 componentType:"text",
 name:"",
 description:"",
 iconName:"text",
 id:"field_1575448385646rgzh6hhh6",
 mandatory:true
}

我没有注意到该问题在其他浏览器中存在,但是我没有像在Chrome中那样尝试过。

谢谢!

我有一个重要的错误正在给我造成很大的伤害。我已经在Vue中完成了表单生成器组件。它由可拖动区域组成,带有可拖动项且外观友好:简短答案,...

javascript vue.js drag-and-drop draggable
1个回答
0
投票

我解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.