JavaScript前端拖拽插件interact.js交互式操作方法

 更新时间:2025年12月25日 08:48:25   作者:@菜菜_达  
interact.js是一个强大的JavaScript库,它提供了丰富的交互功能,其中元素缩放(Resizable)是其核心功能之一,这篇文章主要介绍了JavaScript前端拖拽插件interact.js交互式操作方法的相关资料,需要的朋友可以参考下

interact.js 是一款轻量且功能强大的 JavaScript 拖拽交互库,核心用于实现元素的拖拽、缩放、旋转等交互式操作。

官网

一、核心特点

  • 轻量无依赖,体积仅约 10KB(压缩后),不依赖 jQuery 等框架。
  • 支持多端适配,兼容桌面端(鼠标)和移动端(触摸),适配主流浏览器。
  • 功能丰富,除基础拖拽外,还支持元素缩放、旋转、拖拽对齐、碰撞检测等进阶功能。
  • 高度可定制,可通过配置限制拖拽范围、设置缩放比例、自定义交互回调等。

二、核心功能

  1. 拖拽(Draggable):支持元素自由拖拽、限制拖拽方向(水平 / 垂直)、设置拖拽边界。
  2. 缩放(Resizable):允许通过拖拽元素边缘 / 角落调整尺寸,可限制缩放比例和方向。
  3. 旋转(Rotatable):支持鼠标 / 触摸控制元素旋转,可设置旋转中心和角度范围。
  4. 交互辅助:提供拖拽对齐(吸附到网格 / 其他元素)、碰撞检测、拖拽排序等实用功能。

三、适用场景

  • 页面组件拖拽排序(如仪表盘、表单元素配置)。
  • 可视化工具(如图表编辑器、流程图制作工具)。
  • 响应式界面调整(如可缩放的面板、弹窗)。
  • 移动端交互组件(如拖拽式菜单、滑动卡片)。

四、安装使用

首先需要引入 interact.js 库,有两种方式:

  1. CDN 引入(推荐快速测试):

    <script src="https://cdn.jsdelivr.net/npm/interactjs/dist/interact.min.js"></script>
    
  2. npm 安装(适合项目开发):

    npm install interactjs
    

五、相关属性

1、拖拽(draggable)核心属性

通过 interact(selector).draggable({ /* 配置 */ }) 定义,主要属性包括:

属性名类型 / 值说明
enabledboolean是否启用拖拽(默认 true,设为 false 可动态禁用)。
inertiaboolean / 对象启用惯性拖拽(拖拽结束后继续滑动)。- 为对象时可配置:- resistance:阻力(0~1,值越小惯性越强,默认 0.1);- minSpeed:触发惯性的最小速度(默认 100px/s);- endSpeed:惯性结束时的速度阈值(默认 10px/s)。
autoScrollboolean / 对象拖拽到容器边缘时自动滚动容器(如页面、滚动框)。- 为对象时可配置:- speed:滚动速度(默认 50px/s);- margin:触发滚动的边缘距离(默认 60px);- container:指定滚动容器(默认 window)。
restrict对象限制拖拽范围,支持:- restriction:限制区域(parent/ 选择器 / 坐标对象 {left, top, right, bottom});- endOnlytrue 时仅在拖拽结束后校正位置(默认实时限制);- elementRect:元素参与限制的区域(如 {left:0, right:1, top:0, bottom:1} 代表整个元素)。
axis'x' / 'y' / null限制拖拽方向(x 水平,y 垂直,null 自由拖拽,默认 null)。
snap对象拖拽时吸附到网格或元素,支持:- targets:吸附目标(如 interact.snappers.grid({x:20, y:20}) 表示 20px 网格);- offset:吸附偏移量(如 {x:10, y:10});- relativePoints:元素上的吸附参考点(如 [{x:0.5, y:0.5}] 为中心点)。
allowFrom选择器仅允许通过元素内的指定子元素触发拖拽(如 .handle 表示仅通过手柄拖拽)。
ignoreFrom选择器忽略元素内的指定子元素(不触发拖拽,如 .no-drag)。

2、缩放(resizable)核心属性

通过 interact(selector).resizable({ /* 配置 */ }) 定义,主要属性包括:

属性名类型 / 值说明
enabledboolean是否启用缩放(默认 true)。
edges对象允许缩放的边缘({left, right, top, bottom},设为 true 启用对应边缘)。例:{left: true, right: true, bottom: true} 允许左、右、下边缘缩放。
inertiaboolean / 对象缩放惯性(类似拖拽,结束后继续微小缩放),配置同拖拽的 inertia
restrict对象限制缩放范围,支持:- min:最小尺寸({width, height});- max:最大尺寸({width, height});- ratio:宽高比(如 16/9 锁定比例)。
snap对象缩放到指定网格尺寸,如 {targets: [interact.snappers.grid({width:50, height:50})]} 表示宽高按 50px 递增。
allowFrom / ignoreFrom选择器同拖拽,控制触发缩放的子元素。

3、通用事件属性

所有交互(拖拽、缩放、旋转)都支持通过 .on(eventName, callback) 监听事件,常用事件:

事件名触发时机回调参数(event)关键信息
[type]start交互开始时(如 dragstartevent.target(目标元素)、初始坐标 / 角度。
[type]move交互过程中(如 dragmoveevent.dx/dy(位移变化)、event.angle(角度变化)等。
[type]end交互结束时(如 dragendevent.velocity(结束时速度)、最终状态信息。

4、注意事项(1.10.7 版本)

  1. 该版本依赖元素的 transform 属性计算位置,需确保元素未被其他 transform 样式(如 scale)干扰,否则可能导致位置偏移。
  2. autoScroll 对嵌套滚动容器的支持有限,复杂场景可能需要手动处理滚动逻辑。

六、拖拽示例

// html
<div id="content"></div>
// js
let position = { x: 0, y: 0 };
    interact('#content').draggable({
        ignoreFrom: ".restore-drag,.tc-fz-input",// 忽略的类
        listeners: {
            start:(event) {},
            move (event) {
                position.x += event.dx;
                position.y += event.dy;
                event.target.style.transform = `translate(${position.x}px, ${position.y}px)`;            },
            end(event) {}   
        },
    });

总结 

到此这篇关于JavaScript前端拖拽插件interact.js交互式操作方法的文章就介绍到这了,更多相关interact.js前端拖拽插件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js创建对象的方法汇总

    js创建对象的方法汇总

    这篇文章主要介绍了js创建对象的方法,js一个有三种方法创建对象,这里为大家做一个总结,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JavaScript仿微信打飞机游戏

    JavaScript仿微信打飞机游戏

    这篇文章主要为大家详细介绍了JavaScript仿微信打飞机游戏的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • JavaScript日期和时间的格式化及其它常用处理方法

    JavaScript日期和时间的格式化及其它常用处理方法

    这篇文章主要给大家介绍了关于JavaScript日期和时间的格式化及其它常用处理方法,JavaScript中可以使用Date对象来表示日期和时间,如果需要格式化日期和时间,可以使用Date对象的几个方法和一些字符串操作方法来实现,需要的朋友可以参考下
    2023-09-09
  • ES6新特性八:async函数用法实例详解

    ES6新特性八:async函数用法实例详解

    这篇文章主要介绍了ES6新特性八:async函数用法,结合实例形式分析了async函数的功能、原理、使用方法与相关注意事项,需要的朋友可以参考下
    2017-04-04
  • js jquery 获取某一元素到浏览器顶端的距离实现方法

    js jquery 获取某一元素到浏览器顶端的距离实现方法

    今天小编就为大家分享一篇js jquery 获取某一元素到浏览器顶端的距离实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • JavaScript中的稀疏数组与密集数组[译]

    JavaScript中的稀疏数组与密集数组[译]

    一般来说,JavaScript中的数组是稀疏的,也就是说,数组中的元素之间可以有空隙,因为一个数组其实就是一个键值映射.本文解释了如何创建稀疏数组和不稀疏的数组
    2012-09-09
  • js实现文本框宽度自适应文本宽度的方法

    js实现文本框宽度自适应文本宽度的方法

    这篇文章主要介绍了js实现文本框宽度自适应文本宽度的方法,可实现根据文本框内容动态改变宽度的功能,涉及javascript动态操作页面元素属性的技巧,需要的朋友可以参考下
    2015-08-08
  • 实现连缀调用的map方法(prototype)

    实现连缀调用的map方法(prototype)

    实现连缀调用的map方法(prototype),需要学习的朋友可以参考下。
    2009-08-08
  • JavaScript 中的运算符和表达式介绍(二)

    JavaScript 中的运算符和表达式介绍(二)

    这篇文章主要介绍了JavaScript 中的运算符和表达式介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 一文详解JavaScript中的URL编码和解码

    一文详解JavaScript中的URL编码和解码

    在本文中,我们将探讨在 JavaScript 中处理 URL 的现代技术,并回答与在 JavaScript 中编码和解码 URL 相关的问题,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-03-03

最新评论