1.2.9 • Published 10 months ago

@nimble-ui/drag v1.2.9

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

nimble-ui drag 拖拽插件

📢 介绍

nimble-ui drag 拖拽插件支持以下功能:

  • 拖拽
  • 缩放
  • 旋转
  • 辅助线
  • 组合拖拽
  • 吸附

⚡ 使用说明

安装依赖

npm i @nimble-ui/drag
# or
yarn add @nimble-ui/drag
# or
pnpm i @nimble-ui/drag

在vue中使用

<!-- 
 注意:
  1.可拖拽的元素一定要添加 data-drag-type="move" 属性,这个属性告诉插件该元素可移动
  2.data-drag-id 是唯一标识
-->
<template>
  <div ref="warpRef" class="warp">
    <div
      v-for="item in list"
      :key="item.id"
      data-drag-type="move"
      :data-drag-id="item.id"
      class="move"
      :style="{left: `${item.left}px`, top: `${item.top}px`, transform: `rotate(${item.angle || 0}deg)`}"
    >
      <div class="content">{{item.title}}</div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { reactive, ref, onBeforeUnmount } from 'vue';
import drag, { movePlugin, sizePlugin, guidelinesPlugin, rotatePlugin, groupPlugin } from '@nimble-ui/drag';

defineOptions({ name: 'move' })

const list = reactive([
  {id: 1, title: '测试1', left: 0, top: 0},
  {id: 2, title: '测试2', left: 200, top: 50},
  {id: 3, title: '测试3', left: 500, top: 200},
  {id: 3, title: '测试3', left: 600, top: 300},
])

const warpRef = ref<HTMLElement>()
const getEl = () => warpRef.value!

const { on, destroy } = drag(getEl, {
  scale: 1,
  disabled: (target, id) => id == '3',
  plugins: [
    movePlugin(), // 拖拽插件
    sizePlugin(), // 放大缩小插件
    groupPlugin(), // 组合拖拽插件
    rotatePlugin(), // 旋转插件
    guidelinesPlugin(), // 辅助线插件
  ],
})

on('change', ({list, obj}) => {
  console.log(list) // 返回数组
  console.log(obj) // 如果元素有data-drag-id属性才有值
})
on("drag", ({list, obj}) => {
  console.log(obj)
})
on("resize", ({list, obj}) => {
  console.log(obj)
})
// 销毁绑定的事件等
onBeforeUnmount(destroy)
</script>
<style lang="scss">
.warp {
  height: 100vh;
  width: 100vw;
  position: relative;
  transform: scale(1);
  transform-origin: left top;

  .move {
    position: absolute;
    width: 150px;
    height: 50px;
    background-color: red;
  }

  .content {
    position: absolute;
    left: 50px;
    top: 25px;
    width: 50%;
    height: 50%;
  }
}
</style>

在react中使用

import drag from "@nimble-ui/drag"

drag 参数

属性名说明类型默认
el画布元素element | () => element-
options参数Object-

options属性

属性名说明类型默认
plugins插件Array-
scale画布缩放比例number | () => number-
limitBoundary限制移出画布boolean-
changeSiteOrSize改变位置、大小、旋转角度触发这个方法(target, data) => void-
disabled禁止拖拽(target, id) => boolean-

drag 返回值

属性名说明类型
data返回改变数据Object
uncheck取消选中Function
on绑定事件(type, callback) => void
destroy销毁绑定事件等Function

on支持事件

事件名说明类型
change位置、大小改变(data: ChangeParams) => void
drag拖拽中(data: ChangeParams) => void
drag-start拖拽开始(data: ChangeParams) => void
drag-end拖拽结束(data: ChangeParams) => void
resize缩放中(data: ChangeParams) => void
resize-start旋转开始(data: ChangeParams) => void
resize-end旋转结束(data: ChangeParams) => void

ChangeParams类型

interface DataItem {
  el: Element;
  top: number;
  left: number;
  width: number;
  height: number;
  angle: number;
}
type ChangeParams = { list: []; obj: []; }
1.2.9

10 months ago

1.2.8

10 months ago

1.2.7

10 months ago

1.2.6

10 months ago

1.2.5

10 months ago

1.2.4

10 months ago

1.2.3

10 months ago

1.2.2

11 months ago

1.1.2

11 months ago

1.1.1

11 months ago

1.1.0

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago

1.0.2

11 months ago

1.0.1

11 months ago

1.0.0

11 months ago