GithubHelp home page GithubHelp logo

hilongjw / vue-dragging Goto Github PK

View Code? Open in Web Editor NEW
766.0 23.0 145.0 396 KB

A sortable list directive with Vue

Home Page: http://hilongjw.github.io/vue-dragging/

License: MIT License

JavaScript 76.27% HTML 23.73%
vue

vue-dragging's Introduction

Awe-dnd

Makes your elements draggable in Vue.

See Demo: http://hilongjw.github.io/vue-dragging/

Some of goals of this project worth noting include:

  • support desktop and mobile
  • Vue data-driven philosophy
  • support multi comb drag
  • Supports both of Vue 1.0 and Vue 2.0

Requirements

  • Vue: ^1.0.0 or ^2.0.0

Install

From npm:

$ npm install awe-dnd --save

Usage

//main.js

import VueDND from 'awe-dnd'

Vue.use(VueDND)
<!--your.vue-->
<script>
export default {
  data () {
    return {
        colors: [{
            text: "Aquamarine"
        }, {
            text: "Hotpink"
        }, {
            text: "Gold"
        }, {
            text: "Crimson"
        }, {
            text: "Blueviolet"
        }, {
            text: "Lightblue"
        }, {
            text: "Cornflowerblue"
        }, {
            text: "Skyblue"
        }, {
            text: "Burlywood"
        }]
    }
  },
  /* if your need multi drag
  mounted: function() {
      this.colors.forEach((item) => {
          Vue.set(item, 'isComb', false)
      })
  } */
}
</script>

<template>
  <div class="color-list">
      <div
          class="color-item"
          v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color' }"
          :key="color.text"
      >{{color.text}}</div>
  </div>
</template>

API

v-dragging="{ item: color, list: colors, group: 'color' }"

Arguments:

  • {item} Object
  • {list} Array
  • {group} String
  • {comb} String

group is unique key of dragable list.

comb use for multi drag

Example

<!-- Vue2.0 -->
<div class="color-list">
    <div
        class="color-item"
        v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color' }"
        :key="color.text"
    >{{color.text}}</div>
</div>

<!-- Vue1.0 -->
<div class="color-list">
    <div
        class="color-item"
        v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color', key: color.text }"
        track-by="text"
    >{{color.text}}</div>
</div>

Event

<div class="color-list">
    <div
        class="color-item"
        v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color', otherData: otherData, comb: 'isComb' }"
        :key="color.text"
    >{{color.text}}</div>
</div>
export default {
  mounted () {
    this.$dragging.$on('dragged', ({ value }) => {
      console.log(value.item)
      console.log(value.list)
      console.log(value.otherData)
    })
    this.$dragging.$on('dragend', () => {

    })
  }
}

License

The MIT License

vue-dragging's People

Contributors

hilongjw avatar i255979 avatar leonwuv avatar leslieyq avatar zeromake avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-dragging's Issues

npm 包未同步更新

npm 和 github 都是0.3.0 的版本,而从npm拉下的代码却不是最新的。一些bug仍然存在

发现了一个路由切换后事件重复注册的bug

demo: https://jsfiddle.net/zaufpzkg/
路由先切换几次,就会看到控制台的多余事件触发。

现在我的方案是再加一个自定义指令来设置事件。感觉不是很好。

        Vue.directive('dragevent', {
            bind(el, binding) {
                const dragend = binding.value.dragend
                const dragged = binding.value.dragged
                dragged && $dragging.$on('dragged', dragged)
                dragend && $dragging.$on('dragend', dragend)
            },
            update(el, binding) {
                const oldDragged = binding.oldValue.dragged
                const oldDragend = binding.oldValue.dragend
                oldDragged && $dragging.$off('dragged', oldDragged)
                oldDragend && $dragging.$off('dragend', oldDragend)

                const dragged = binding.value.dragged
                const dragend = binding.value.dragend
                dragged && $dragging.$on('dragged', dragged)
                dragend && $dragging.$on('dragend', dragend)
            },
            unbind(el, binding) {
                const dragged = binding.value.dragged
                const dragend = binding.value.dragend
                dragged && $dragging.$off('dragged', dragged)
                dragend && $dragging.$off('dragend', dragend)
            }
        })

或者直接改成组件来?

二次赋值后的拖拽问题

第一次帮定数据 arr = [obj1,obj2] 然后通过js修改成 arr=[obj3,obj4] 然后拖拽就失效了,调试发现第二次拖拽的时候 arr变成了 arr : [obj3,obj4,undefined]

[Question] Nested Sorting

Does this library support having nested sorting groups? I've tried it and it doesn't seem to work. If I drag a child group, it drags the entire parent. Is there anything that can be done to support it?

这个拖拽插件有React版本吗

这个拖拽有React版本吗,以前在这个组件基础上改成了一个文件管理器,现在项目所有组件要转React。vue-dragging部分源码还改过,卡这儿了,换用其他拖拽重写的话工程量巨大

您好,请问数组嵌套如何使用呢?

如题,数组嵌套如何使用呢?
例如:colors: [{
text: "Aquamarine",
child:[
{
text: "text1",
},
{
text: "text2",
}
]
}]
如何给child也加上拖拽排序呢?按照Demo加上v-dragging,触发了dragged跟dragend的,但是并没有排序,求楼主解答。

第一次移动被占位置的组件被移除

<div v-for="(comp,index) in displayComponents" :key="index" :is="comp" v-dragging="{item: comp, list: displayComponents, group: 'list' }"></div>

displayComponents 是组件列表

修复了若干bug,以及建议

BUG

  • vue2 直接更新 list 时 item 对象无法同步 commit
  • firefox 有 text 元素会报 el.getAttribute is undefined, el.classList is undefined commit
  • 使用相同数据替换 list ,list 数据对象无法同步 commit
  • 如果一个页面有多个组然后发生两个不同组的 item 拖拽会报错。解决方案见下面的 Current 对象加入group识别。

建议

  • 添加 dragend 事件回调用于排序的请求触发(后面才改名为dragend) commit
  • 使用 key 替代 dom 元素,去除 es6 的 Map 依赖 commit
  • Current 对象无需每个 group 单独使用,事件回调带上group参数,事件绑定解绑优化 commit

请作者查看后需要哪些我再考虑pr

拖拽的一个明显bug

比如说我有四个div,拖动第一个,但是我在this.$dragging.$on中打印出来的永远是最后一个的item,并且调换位置之后js会报错

Drop event

So this event fires when list item is dragged

this.$dragging.$on('dragged', ({ value }) => {  
})

Is there a way to get the onDrop event that occurs when the dragged item is dropped?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.