JavaScript前端拖拽插件interact.js交互式操作方法
interact.js 是一款輕量且功能強(qiáng)大的 JavaScript 拖拽交互庫(kù),核心用于實(shí)現(xiàn)元素的拖拽、縮放、旋轉(zhuǎn)等交互式操作。
一、核心特點(diǎn)
- 輕量無依賴,體積僅約 10KB(壓縮后),不依賴 jQuery 等框架。
- 支持多端適配,兼容桌面端(鼠標(biāo))和移動(dòng)端(觸摸),適配主流瀏覽器。
- 功能豐富,除基礎(chǔ)拖拽外,還支持元素縮放、旋轉(zhuǎn)、拖拽對(duì)齊、碰撞檢測(cè)等進(jìn)階功能。
- 高度可定制,可通過配置限制拖拽范圍、設(shè)置縮放比例、自定義交互回調(diào)等。
二、核心功能
- 拖拽(Draggable):支持元素自由拖拽、限制拖拽方向(水平 / 垂直)、設(shè)置拖拽邊界。
- 縮放(Resizable):允許通過拖拽元素邊緣 / 角落調(diào)整尺寸,可限制縮放比例和方向。
- 旋轉(zhuǎn)(Rotatable):支持鼠標(biāo) / 觸摸控制元素旋轉(zhuǎn),可設(shè)置旋轉(zhuǎn)中心和角度范圍。
- 交互輔助:提供拖拽對(duì)齊(吸附到網(wǎng)格 / 其他元素)、碰撞檢測(cè)、拖拽排序等實(shí)用功能。
三、適用場(chǎng)景
- 頁(yè)面組件拖拽排序(如儀表盤、表單元素配置)。
- 可視化工具(如圖表編輯器、流程圖制作工具)。
- 響應(yīng)式界面調(diào)整(如可縮放的面板、彈窗)。
- 移動(dòng)端交互組件(如拖拽式菜單、滑動(dòng)卡片)。
四、安裝使用
首先需要引入 interact.js 庫(kù),有兩種方式:
CDN 引入(推薦快速測(cè)試):
<script src="https://cdn.jsdelivr.net/npm/interactjs/dist/interact.min.js"></script>
npm 安裝(適合項(xiàng)目開發(fā)):
npm install interactjs
五、相關(guān)屬性
1、拖拽(draggable)核心屬性
通過 interact(selector).draggable({ /* 配置 */ }) 定義,主要屬性包括:
| 屬性名 | 類型 / 值 | 說明 |
|---|---|---|
enabled | boolean | 是否啟用拖拽(默認(rèn) true,設(shè)為 false 可動(dòng)態(tài)禁用)。 |
inertia | boolean / 對(duì)象 | 啟用慣性拖拽(拖拽結(jié)束后繼續(xù)滑動(dòng))。- 為對(duì)象時(shí)可配置:- resistance:阻力(0~1,值越小慣性越強(qiáng),默認(rèn) 0.1);- minSpeed:觸發(fā)慣性的最小速度(默認(rèn) 100px/s);- endSpeed:慣性結(jié)束時(shí)的速度閾值(默認(rèn) 10px/s)。 |
autoScroll | boolean / 對(duì)象 | 拖拽到容器邊緣時(shí)自動(dòng)滾動(dòng)容器(如頁(yè)面、滾動(dòng)框)。- 為對(duì)象時(shí)可配置:- speed:滾動(dòng)速度(默認(rèn) 50px/s);- margin:觸發(fā)滾動(dòng)的邊緣距離(默認(rèn) 60px);- container:指定滾動(dòng)容器(默認(rèn) window)。 |
restrict | 對(duì)象 | 限制拖拽范圍,支持:- restriction:限制區(qū)域(parent/ 選擇器 / 坐標(biāo)對(duì)象 {left, top, right, bottom});- endOnly:true 時(shí)僅在拖拽結(jié)束后校正位置(默認(rèn)實(shí)時(shí)限制);- elementRect:元素參與限制的區(qū)域(如 {left:0, right:1, top:0, bottom:1} 代表整個(gè)元素)。 |
axis | 'x' / 'y' / null | 限制拖拽方向(x 水平,y 垂直,null 自由拖拽,默認(rèn) null)。 |
snap | 對(duì)象 | 拖拽時(shí)吸附到網(wǎng)格或元素,支持:- targets:吸附目標(biāo)(如 interact.snappers.grid({x:20, y:20}) 表示 20px 網(wǎng)格);- offset:吸附偏移量(如 {x:10, y:10});- relativePoints:元素上的吸附參考點(diǎn)(如 [{x:0.5, y:0.5}] 為中心點(diǎn))。 |
allowFrom | 選擇器 | 僅允許通過元素內(nèi)的指定子元素觸發(fā)拖拽(如 .handle 表示僅通過手柄拖拽)。 |
ignoreFrom | 選擇器 | 忽略元素內(nèi)的指定子元素(不觸發(fā)拖拽,如 .no-drag)。 |
2、縮放(resizable)核心屬性
通過 interact(selector).resizable({ /* 配置 */ }) 定義,主要屬性包括:
| 屬性名 | 類型 / 值 | 說明 |
|---|---|---|
enabled | boolean | 是否啟用縮放(默認(rèn) true)。 |
edges | 對(duì)象 | 允許縮放的邊緣({left, right, top, bottom},設(shè)為 true 啟用對(duì)應(yīng)邊緣)。例:{left: true, right: true, bottom: true} 允許左、右、下邊緣縮放。 |
inertia | boolean / 對(duì)象 | 縮放慣性(類似拖拽,結(jié)束后繼續(xù)微小縮放),配置同拖拽的 inertia。 |
restrict | 對(duì)象 | 限制縮放范圍,支持:- min:最小尺寸({width, height});- max:最大尺寸({width, height});- ratio:寬高比(如 16/9 鎖定比例)。 |
snap | 對(duì)象 | 縮放到指定網(wǎng)格尺寸,如 {targets: [interact.snappers.grid({width:50, height:50})]} 表示寬高按 50px 遞增。 |
allowFrom / ignoreFrom | 選擇器 | 同拖拽,控制觸發(fā)縮放的子元素。 |
3、通用事件屬性
所有交互(拖拽、縮放、旋轉(zhuǎn))都支持通過 .on(eventName, callback) 監(jiān)聽事件,常用事件:
| 事件名 | 觸發(fā)時(shí)機(jī) | 回調(diào)參數(shù)(event)關(guān)鍵信息 |
|---|---|---|
[type]start | 交互開始時(shí)(如 dragstart) | event.target(目標(biāo)元素)、初始坐標(biāo) / 角度。 |
[type]move | 交互過程中(如 dragmove) | event.dx/dy(位移變化)、event.angle(角度變化)等。 |
[type]end | 交互結(jié)束時(shí)(如 dragend) | event.velocity(結(jié)束時(shí)速度)、最終狀態(tài)信息。 |
4、注意事項(xiàng)(1.10.7 版本)
- 該版本依賴元素的
transform屬性計(jì)算位置,需確保元素未被其他transform樣式(如scale)干擾,否則可能導(dǎo)致位置偏移。 autoScroll對(duì)嵌套滾動(dòng)容器的支持有限,復(fù)雜場(chǎng)景可能需要手動(dòng)處理滾動(dòng)邏輯。
六、拖拽示例
// 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) {}
},
});總結(jié)
到此這篇關(guān)于JavaScript前端拖拽插件interact.js交互式操作方法的文章就介紹到這了,更多相關(guān)interact.js前端拖拽插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript日期和時(shí)間的格式化及其它常用處理方法
這篇文章主要給大家介紹了關(guān)于JavaScript日期和時(shí)間的格式化及其它常用處理方法,JavaScript中可以使用Date對(duì)象來表示日期和時(shí)間,如果需要格式化日期和時(shí)間,可以使用Date對(duì)象的幾個(gè)方法和一些字符串操作方法來實(shí)現(xiàn),需要的朋友可以參考下2023-09-09
ES6新特性八:async函數(shù)用法實(shí)例詳解
這篇文章主要介紹了ES6新特性八:async函數(shù)用法,結(jié)合實(shí)例形式分析了async函數(shù)的功能、原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
js jquery 獲取某一元素到瀏覽器頂端的距離實(shí)現(xiàn)方法
今天小編就為大家分享一篇js jquery 獲取某一元素到瀏覽器頂端的距離實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09
JavaScript中的稀疏數(shù)組與密集數(shù)組[譯]
一般來說,JavaScript中的數(shù)組是稀疏的,也就是說,數(shù)組中的元素之間可以有空隙,因?yàn)橐粋€(gè)數(shù)組其實(shí)就是一個(gè)鍵值映射.本文解釋了如何創(chuàng)建稀疏數(shù)組和不稀疏的數(shù)組2012-09-09
js實(shí)現(xiàn)文本框?qū)挾茸赃m應(yīng)文本寬度的方法
這篇文章主要介紹了js實(shí)現(xiàn)文本框?qū)挾茸赃m應(yīng)文本寬度的方法,可實(shí)現(xiàn)根據(jù)文本框內(nèi)容動(dòng)態(tài)改變寬度的功能,涉及javascript動(dòng)態(tài)操作頁(yè)面元素屬性的技巧,需要的朋友可以參考下2015-08-08
實(shí)現(xiàn)連綴調(diào)用的map方法(prototype)
實(shí)現(xiàn)連綴調(diào)用的map方法(prototype),需要學(xué)習(xí)的朋友可以參考下。2009-08-08
JavaScript?中的運(yùn)算符和表達(dá)式介紹(二)
這篇文章主要介紹了JavaScript?中的運(yùn)算符和表達(dá)式介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

