環境
Angular: 15
interactjs: 1.10.27
interactjsとは?
https://github.com/taye/interact.js
JavaScriptでドラッグ&ドロップ、リサイズ、マルチタッチジェスチャー(慣性とスナッピング機能付き)を実装できるライブラリ。
インストール
npm install interactjs
npm install --save-dev @interactjs/types
でインストール。
実装
template
<div class="draggable">Draggable Element</div>
まずテンプレート側でdiv
を作成する。
component
次に、
@ViewChild('canvasEl') canvasEl: ElementRef | undefined;
コンポーネント側でcanvas
を取得し、
ngAfterViewInit() {
const position = { x: 0, y: 0 }
interact('.draggable').draggable({
listeners: {
start (event) {
console.log(event.type, event.target)
},
move (event) {
position.x += event.dx
position.y += event.dy
event.target.style.transform =
`translate(${position.x}px, ${position.y}px)`
},
}
})
}
interact
を呼び出す。
これで画面表示まで行けた。
後は自由にカスタマイズしていける。
カスタマイズ
- 要素を自由にカスタマイズしたかったので、
translate
ではなくabsolute
にした - 複数要素に対応
- ドラッグやリサイズはハンドルを使用する
とかいろいろ、やりたいことは結構実現できるカスタマイズ性の高いライブラリーだった。
dom
を動かしたかったというのがあるので、Fabric.js
ではなくinteract
を採用した。