UNPKG

dragable-js

Version:

一个简单易用的js拖动库

254 lines (191 loc) 5.96 kB
# Dragable.js 使用文档 - v1.1.0 ## 简介 > Dragable.js 是一个轻量级、易用的 JavaScript 拖动库,支持移动端和 PC 端,提供元素拖动和边缘停靠功能。本库通过扩展 HTMLElement 原型提供简单易用的 API。 - **版本**: 1.1.0 - **许可证**: MIT © 2025 王小玗 - **CDN 地址**: - [jsDelivr](https://cdn.jsdelivr.net/npm/dragable-js@1.1.0/) - [unpkg](https://unpkg.com/dragable-js@1.1.0/) ## 安装与引入 ### 直接引入 CDN ```html <script src="https://cdn.jsdelivr.net/npm/dragable-js@1.1.0"></script> <!-- 或 --> <script src="https://unpkg.com/dragable-js@1.1.0"></script> ``` ### NPM 安装 ```bash npm install dragable-js ``` 然后通过模块系统引入: ```javascript import 'dragable-js'; ``` ## 基本用法 ### 启用拖动 ```javascript const element = document.getElementById('myElement'); element.enableDrag(); ``` ### 禁用拖动 ```javascript element.disableDrag(); ``` ## 配置选项 `enableDrag()` 方法接受一个配置对象: ```javascript element.enableDrag({ dockable: true, // 是否启用停靠功能,默认true dockDistance: 20, // 停靠触发距离(px),默认20 dockAnimationDuration: 300, // 停靠动画时长(ms),默认300 dockAreas: ['top', 'right', 'bottom', 'left'] // 可停靠区域,默认全部 }); ``` ### 选项说明 | 选项 | 类型 | 默认值 | 描述 | |------|------|--------|------| | `dockable` | boolean | `true` | 是否启用停靠功能 | | `dockDistance` | number | `20` | 距离屏幕边缘多少像素时触发停靠 | | `dockAnimationDuration` | number | `300` | 停靠动画时长(毫秒) | | `dockAreas` | Array | `['top', 'right', 'bottom', 'left']` | 允许停靠的区域,可设置为部分区域 | ## 事件系统 Dragable.js 提供了多个自定义事件供监听: ### 可用事件 - `dragstart` - 拖动开始时触发 - `dragmove` - 拖动过程中持续触发 - `dragend` - 拖动结束时触发 - `dock` - 元素停靠到边缘时触发 ### 事件对象详情 每个事件都包含 `detail` 属性,提供相关数据: #### dragstart 事件 ```javascript { x: number, // 鼠标/触摸点的X坐标 y: number // 鼠标/触摸点的Y坐标 } ``` #### dragmove 事件 ```javascript { x: number, // 当前鼠标/触摸点的X坐标 y: number, // 当前鼠标/触摸点的Y坐标 left: number, // 元素当前的left位置 top: number, // 元素当前的top位置 docked: boolean, // 是否已停靠 dockArea: string|null // 停靠区域(null表示未停靠) } ``` #### dock 事件 ```javascript { area: string, // 停靠区域('top', 'right', 'bottom', 'left'或组合如'top-left') left: number, // 停靠后的left位置 top: number // 停靠后的top位置 } ``` ### 事件监听示例 ```javascript element.addEventListener('dragstart', (e) => { console.log('开始拖动', e.detail); }); element.addEventListener('dragmove', (e) => { console.log('拖动中', e.detail); }); element.addEventListener('dragend', () => { console.log('拖动结束'); }); element.addEventListener('dock', (e) => { console.log('停靠在', e.detail.area); }); ``` ## CSS 注意事项 1. **定位要求**: 元素需要有 `position` 属性设置为 `relative`、`absolute` 或 `fixed`。如果元素没有设置,库会自动设置为 `absolute`。 2. **拖动时类名**: 拖动过程中会添加 `dragging` 类名,可用于自定义拖动样式。 ```css .dragging { /* 拖动时的自定义样式 */ opacity: 0.8; box-shadow: 0 0 10px rgba(0,0,0,0.5); } ``` 3. **停靠动画**: 停靠时使用 CSS transition 实现平滑动画,可通过配置修改时长。 ## 完整示例 ```html <!DOCTYPE html> <html> <head> <title>Dragable.js 示例</title> <style> #draggable { width: 100px; height: 100px; background-color: #3498db; color: white; display: flex; align-items: center; justify-content: center; cursor: move; user-select: none; position: absolute; top: 50px; left: 50px; transition: left 0.3s ease-out, top 0.3s ease-out; } #draggable.dragging { opacity: 0.8; box-shadow: 0 0 10px rgba(0,0,0,0.5); } </style> </head> <body> <div id="draggable">拖动我</div> <script src="https://cdn.jsdelivr.net/npm/dragable-js@1.1.0"></script> <script> const draggable = document.getElementById('draggable'); // 启用拖动并配置 draggable.enableDrag({ dockable: true, dockDistance: 30, dockAnimationDuration: 200, dockAreas: ['top', 'left', 'right'] // 不启用底部停靠 }); // 监听事件 draggable.addEventListener('dragstart', (e) => { console.log('开始拖动', e.detail); }); draggable.addEventListener('dragmove', (e) => { console.log('拖动中', e.detail); }); draggable.addEventListener('dragend', () => { console.log('拖动结束'); }); draggable.addEventListener('dock', (e) => { console.log('停靠在', e.detail.area); }); </script> </body> </html> ``` ## 浏览器兼容性 Dragable.js 兼容所有现代浏览器,包括: - Chrome - Firefox - Safari - Edge - iOS Safari - Android Browser ## 更新日志 ### v1.1.0 - 新增边缘停靠功能 - 添加配置选项系统 - 新增 `dock` 事件 - 改进边界处理 - 添加停靠动画支持 ### v1.0.0 - 初始版本 - 基础拖动功能 - 支持移动端和PC端 - 简单的事件系统 ## 许可证 MIT License Copyright (c) 2025 王小玗