高性能轻量级可视化元素选择库,零依赖,像桌面端一样框选元素。

所在地:
美国
语言:
en
收录时间:
2026-08-26
ViselectViselect

什么是 Viselect

Viselect 是一个面向 Web 前端项目的可视化元素选择库。它解决的问题很具体:在网页中实现类似操作系统桌面的框选交互——按下鼠标、拖拽出一个矩形选区、覆盖范围内的元素被高亮选中。整个库以原生 TypeScript 编写,不依赖 jQuery、React 或任何其他第三方框架。

核心特性

零依赖与轻量

Viselect 的打包体积经过压缩后约为数 KB 级别,不引入任何运行时依赖。对于关注首屏加载性能或需要嵌入到组件库中的场景,这一特性降低了集成成本与潜在依赖冲突风险。

框架无关

核心逻辑与 DOM 操作直接交互,不绑定特定前端框架。官方提供了原生 JavaScript 用法,同时社区可通过轻量封装接入 Vue、React 或 Svelte 等环境。这意味着同一套选择行为可以在不同技术栈之间保持一致。

桌面级交互体验

Viselect 在交互细节上对齐桌面操作系统的常见行为:

  • 支持拖拽框选与点击单选
  • 可通过 Ctrl / Meta 键进行追加选择或取消选择
  • 支持滚动容器内的自动边缘滚动
  • 可选择是否在框选时忽略某些元素

样式与行为可定制

库本身只负责选择逻辑与选区渲染,视觉样式通过 CSS 类名暴露给使用者。选区矩形、选中元素的高亮样式均可由项目自行定义,便于融入既有设计系统。

基本用法

import Viselect from 'viselect';

const selection = new Viselect({
  area: document.querySelector('.container'),
  elements: () => Array.from(document.querySelectorAll('.selectable'))
});

selection.on('selected', (items) => {
  console.log('当前选中的元素:', items);
});

初始化时需要传入一个作为交互边界的容器(area)和一个返回可选中元素列表的函数。事件系统覆盖 selectedbeforestartstartmovestop 等关键节点,便于在业务层做状态同步。

适用场景

场景 说明
文件管理器界面 框选文件/文件夹,配合拖拽或批量操作
仪表板与看板 批量选中卡片进行排序、删除或分组
图片/素材库 多选素材后统一处理
数据表格增强 在自定义网格布局中实现区域选择
低代码编辑器 画布元素的多选与对齐操作

注意事项

  • Viselect 处理的是 DOM 元素的框选,不涉及 Canvas 内部图形选择。
  • 对于虚拟滚动或大量 DOM 节点的场景,需自行控制 elements 返回的数量,避免选择计算开销过大。
  • 移动端触摸事件的支持有限,主要面向桌面端鼠标交互。

获取与集成

项目托管于 GitHub,采用 MIT 协议发布。可通过 npm 安装:

npm install viselect

也可通过 CDN 引入 UMD 构建版本直接用于浏览器环境。文档站点提供了完整的 API 说明与交互示例,适合在集成前评估其行为是否符合产品预期。

相关导航