0.1.20 • Published 1 year ago

vue-device-drag v0.1.20

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

vue-device-drag

简介

基于Vue2、3,整合了mouse、touch而成的拖拽指令,便于一套代码同时应用于pc端和设备端

使用方法

npm install vue-device-drag

vue2:

import DeviceDrag from "vue-device-drag";

Vue.use(DeviceDrag)

vue3:

import { createApp } from 'vue'
import App from './App.vue'
import { vue3 as DeviceDrag } from "vue-device-drag";

createApp(App).use(DeviceDrag).mount("#app");

作用于拖拽元素的指令

指令名说明指令的绑定值类型
device-drag启用拖拽功能,需要拖拽的元素必须有×
device-drag-delay延迟拖拽的时间(ms),注意:mouse-delay、touch-delay指令优先级大于该指令Number
device-drag-mouse-delay当拖拽的为鼠标事件的时候,延迟拖拽的时间(ms)Number
device-drag-touch-delay当拖拽的为触摸事件的时候,延迟拖拽的时间(ms)Number
device-drag-disable动态控制是否允许拖动Boolean
device-drag-data指定该元素触发拖拽相关指令时,绑定的数据String / Number / Boolean / Object
device-drag-start指定元素触发拖拽开始指令时,调用的方法Function
device-drag-end指定元素触发拖拽结束指令时,调用的方法Function

作用于目标元素的指令

指令名说明指令的绑定值类型
device-drag启用拖拽功能,需要拖拽的元素必须有×
device-drag-disable动态控制是否允许拖动Boolean
device-drag-data指定该元素触发拖拽相关指令时,绑定的数据String / Number / Boolean / Object
device-drag-enter指定拖拽元素进入目标元素时,调用的方法Function
device-drag-over指定拖拽元素在目标元素上移动时,调用的方法Function
device-drag-leave指定拖拽元素离开目标元素时,调用的方法Function
device-drop指定拖拽元素在目标元素上结束拖拽时,调用的方法Function

事件类指令调用绑定的方法时,传入的参数中带有以下参数

参数名说明数据类型
eventName若使用指令时,有传入指令参数,则值为指令参数,否则为空String
clientX事件触发时,鼠标的位置Number
clientY事件触发时,鼠标的位置Number
pointEl事件触发时,鼠标所在的元素(不代表一定是事件触发的元素)Element
dragEl拖拽元素Element
data拖拽元素使用device-drag-data绑定的数据String / Number / Boolean / Object
target目标元素Element
targetData目标元素使用device-drag-data绑定的数据String / Number / Boolean / Object

指令参数

当指令device-drag使用时带有参数,如:

v-device-drag:test

则只有带有相同参数test的事件指令才会被触发,如:

v-device-drag-start:test="doSomething"

v-device-drag-end:test="doSomething"

v-device-drag-enter:test="doSomething"

v-device-drag-over:test="doSomething"

v-device-drag-leave:test="doSomething"

v-device-drop:test="doSomething"

事件指令可通过增加修饰符stop来阻止事件的冒泡传递,如:

v-device-drag-over:test.stop="doSomething"

判断是否正在拖拽过程中

if (this.$deviceDrag) {
    // 拖拽过程中
}

使用示例

<template>
  <div id="app">
    <div
        v-device-drag-data="{ groupId: 1 }"
        v-device-drag-enter="dragOver"
        v-device-drag-over="dragOver"
        v-device-drag-leave="dragEnd"
        v-device-drop="drop"
        :class="['group', 'group1', { 'is-over': overGroupId === 1 }]">
      <img
          v-device-drag
          v-device-drag-end="dragEnd"
          alt="Vue logo"
          src="./assets/logo.png">
    </div>
    <div
        v-device-drag-data="{ groupId: 2 }"
        v-device-drag-enter="dragOver"
        v-device-drag-over="dragOver"
        v-device-drag-leave="dragEnd"
        v-device-drop="drop"
        :class="['group', 'group2', { 'is-over': overGroupId === 2 }]"
    ></div>
  </div>
</template>

<script>

export default {
  name: 'App',
  data() {
    return {
      overGroupId: null,
      group1: [],
      group2: []
    }
  },
  methods: {
    dragOver(event) {
      this.overGroupId = event.targetData.groupId
    },
    dragEnd() {
      this.overGroupId = null
    },
    drop(event) {
      event.target.append(event.dragEl)
    }
  }
}
</script>

<style>
#app {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.group {
  width: 300px;
  height: 300px;
  border: 1px solid #cccccc;
  margin: 10px auto;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  background-color: transparent;
  transition: background-color 0.2s linear;
}

.group.is-over {
  background-color: aliceblue;
}
</style>
0.1.20

1 year ago

0.1.18

2 years ago

0.1.17

2 years ago

0.1.16

2 years ago

0.1.15

2 years ago

0.1.14

2 years ago

0.1.13

2 years ago

0.1.12

2 years ago

0.1.11

2 years ago

0.1.10

2 years ago

0.1.9

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago