⚔️ Web Sword Cursor
一个用于植入型替换网页鼠标指针的 JavaScript 库,支持运动方向显示。
✨ 特性
- 🎯 自定义剑形鼠标指针
- 🔄 根据移动方向自动旋转(剑默认方向:从左下到右上 ↗)
- ✨ 动态剑尖光晕效果:
- 自动渲染 SVG 滤镜光晕
- 光的方向与剑身相反,创造剑气外放效果
- 平滑跟随剑的旋转
- 🚀 根据鼠标速度动态变化:速度快时光晕更大更亮,速度慢时光晕更小
- 🎬 平滑的旋转动画:
- 使用 requestAnimationFrame 实现丝滑的插值动画
- 大角度变化时自动使用快速翻转效果
- 始终选择最短的旋转路径
- ⚡ 智能角度阈值,避免抖动(≥3° 才更新)
- 📦 纯 JavaScript,无依赖
- 🎨 灵活的图标系统:内置默认剑、支持自定义 SVG 字符串或 DOM 元素
- 🔧 灵活的配置选项
- 📱 支持 ES Module、UMD 和 IIFE 格式
📦 安装
npm install web-sword-cursor
pnpm add web-sword-cursor
yarn add web-sword-cursor
🚀 使用方法
基础使用
import { initSwordCursor } from 'web-sword-cursor';
initSwordCursor();
fetch('/path/to/your-sword.svg')
.then(response => response.text())
.then(svgString => {
initSwordCursor({ swordItem: svgString });
});
const customSvg = `<svg viewBox="0 0 100 100">...</svg>`;
initSwordCursor({ swordItem: customSvg });
const svgElement = document.querySelector('#my-sword-svg');
initSwordCursor({ swordItem: svgElement });
高级使用
import { CursorManager } from 'web-sword-cursor';
const manager = new CursorManager({
size: 32,
showDirection: true,
directionSensitivity: 50,
zIndex: 9999,
swordItem: customSvg
});
manager.init();
console.log(manager.getCurrentDirection());
console.log(manager.getCurrentSpeed());
manager.updateOptions({ size: 48 });
manager.destroy();
在 HTML 中使用(IIFE)
<script src="https://unpkg.com/web-sword-cursor/dist/web-sword-cursor.iife.js"></script>
<script>
WebSwordCursor.initSwordCursor();
</script>
🎛️ API
initSwordCursor(options?: CursorOptions): CursorManager
快速初始化函数,创建并启用剑形指针。
CursorManager
主要类,用于管理自定义指针。
构造函数
constructor(options?: CursorOptions)
方法
init(): void - 初始化并启用自定义鼠标指针
destroy(): void - 销毁并恢复默认鼠标指针
getCurrentDirection(): Direction - 获取当前移动方向
getCurrentSpeed(): number - 获取当前速度(像素/秒)
updateOptions(options: Partial<CursorOptions>): void - 更新配置
类型定义
interface CursorOptions {
size?: number;
showDirection?: boolean;
directionSensitivity?: number;
zIndex?: number;
swordItem?: string | SVGElement;
}
type Direction =
| 'up'
| 'down'
| 'left'
| 'right'
| 'up-left'
| 'up-right'
| 'down-left'
| 'down-right'
| 'idle';
🛠️ 开发
pnpm install
pnpm dev
pnpm build
pnpm type-check
📐 自定义 SVG 要求
当使用自定义 SVG 时,请遵循以下要求:
方向约定
SVG 格式
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
</svg>
示例:自定义箭头
const arrowSvg = `
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M 10,10 L 90,50 L 10,90 L 30,50 Z"
fill="red" stroke="#fff" stroke-width="2"/>
</svg>
`;
initSwordCursor({ swordItem: arrowSvg });
📝 许可证
MIT License
🤝 贡献
欢迎 Pull Requests 和 Issues!