
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

| ES Drager | |||
|---|---|---|---|
| Draggable | Resizable | Rotatable | skewable |
|
|
|
|
基于 vue3.x + CompositionAPI + typescript + vite 的可拖拽、缩放、旋转的组件
# 拉取项目
git clone https://github.com/vangleer/es-drager.git
# 安装依赖
pnpm install
# 运行项目
pnpm dev
# 打包drager组件
pnpm build
# 打包文档
pnpm docs:build
| 目录 | 功能说明 |
|---|---|
| packages/docs | 项目示例文档、编辑器展示 |
| packages/editor | 编辑器核心代码 |
| packages/drager | es-drager组件 |
下面是基于 es-drager 实现的一个简单可视化拖拽编辑器
npm i es-drager
import { createApp } from 'vue'
import App from './App.vue'
import 'es-drager/lib/style.css'
import Drager from 'es-drager'
createApp(App)
.component('es-drager', Drager)
.mount('#app')
<template>
<es-drager>
drager
</es-drager>
</template>
<template>
<Drager>
drager
</Drager>
</template>
<script setup lang='ts'>
import Drager from 'es-drager'
</script>
直接通过浏览器的 HTML 标签导入 es-drager,然后就可以使用全局变量 ESDrager 了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/es-drager/lib/style.css">
<title>Document</title>
</head>
<body>
<div id="app">
<es-drager>drager</es-drager>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/es-drager"></script>
<script>
const { createApp } = Vue
const app = createApp({})
app.use(ESDrager)
app.mount('#app')
</script>
</body>
</html>
| 属性名 | 说明 | 类型 | 默认 |
|---|---|---|---|
| tag | component组件的is属性 | ^[string] | div |
| type | 类型,rect, text, image | ^[string] | rect |
| width | 宽度 | ^[number] | 100 |
| height | 高度 | ^[number] | 100 |
| left | 横坐标偏移 | ^[number] | 0 |
| top | 纵坐标偏移 | ^[number] | 0 |
| angle | 旋转角度 | ^[number] | 0 |
| skew | 倾斜角度 | ^[Array] | [0, 0] |
| color | 颜色 | ^[string] | #3a7afe |
| resizable | 是否可缩放 | ^[boolean] | true |
| rotatable | 是否可旋转 | ^[boolean] | - |
| skewable | 是否可倾斜 | ^[boolean] | - |
| boundary | 是否判断边界(最近定位父节点,考虑性能谨慎使用。只支持移动,缩放在v1.3后不支持) | ^[boolean] | - |
| disabled | 是否禁用 | ^[boolean] | - |
| minWidth | 最小宽度 | ^[number] | - |
| minHeight | 最小高度 | ^[number] | - |
| maxWidth | 最大宽度 | ^[number] | - |
| maxHeight | 最大高度 | ^[number] | - |
| selected | 控制是否选中 | ^[boolean] | - |
| checkCollision | 是否开启碰撞检测 | ^[boolean] | - |
| snapToGrid | 开启网格 | ^[boolean] | - |
| gridX | 网格X大小 | ^[number] | 50 |
| gridY | 网格Y大小 | ^[number] | 50 |
| snap | 开启吸附 | ^[boolean] | - |
| snapThreshold | 吸附阈值 | ^[number] | 10 |
| markline | 辅助线(可自定义) | ^[boolean]^[Function] | - |
| extraLines | 添加除了es-drager元素以外的对齐线,例如添加中心点对齐(可参考) | ^[Function] | |
| scaleRatio | 缩放比 | ^[number] | 1 |
| disabledKeyEvent | 禁用方向键移动 | ^[boolean] | - |
| border | 是否显示边框 | ^[boolean] | true |
| aspectRatio | 宽高缩放比 | ^[number] | - |
| equalProportion | 宽高等比缩放(该属性和aspectRatio互斥,同时使用会存在问题) | ^[boolean] | - |
| resizeList | 显示的缩放handle列表,top, bottom, left, right, top-left, top-right, bottom-left, bottom-right | ^[string[]] | - |
| 事件名 | 说明 | 类型 |
|---|---|---|
| change | 位置、大小改变 | ^[Function](dragData) => void |
| drag | 拖拽中 | ^[Function](dragData) => void |
| drag-start | 拖拽开始 | ^[Function](dragData) => void |
| drag-end | 拖拽结束 | ^[Function](dragData) => void |
| resize | 缩放中 | ^[Function](dragData) => void |
| resize-start | 缩放开始 | ^[Function](dragData) => void |
| resize-end | 缩放结束 | ^[Function](dragData) => void |
| rotate | 旋转中 | ^[Function](dragData) => void |
| rotate-start | 旋转开始 | ^[Function](dragData) => void |
| rotate-end | 旋转结束 | ^[Function](dragData) => void |
| skew | 倾斜中 | ^[Function](dragData) => void |
| skew-start | 倾斜开始 | ^[Function](dragData) => void |
| skew-end | 倾斜结束 | ^[Function](dragData) => void |
| focus | 获取焦点/选中 | ^[Function](selected) => void |
| blur | 失去焦点/非选中 | ^[Function](selected) => void |
export type DragData = {
width: number
height: number
left: number
top: number
angle: number
skew: number[],
}
| 插槽名 | 说明 |
|---|---|
| default | 自定义默认内容 |
| resize | 缩放handle |
| rotate | 旋转handle |
| skew | 倾斜handle |
FAQs
A draggable, resizable, rotatable component based on vue3
We found that es-drager demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.