###### tags: `konva`, `canvas`, `javascript` # 【自學筆記】konva入門 - Events `Konva`是個`HTML5 Canvas JavaScript`的框架,透過`2d context`的擴展實現各種圖形功能,正好可以實現最近工作需求,就來研究看看囉 --- ### Konva提供的事件 Konva可以很容易的監聽常用的事件: * **Mouse events** * `mouseover` * `mouseout` * `mouseenter` * `mouseleave` * `mousemove` * `mousedown` * `mouseup` * `wheel` * `click` * `dblclick` * **Touch events** * `touchstart` * `touchmove` * `touchend` * `tap` * `dbltap` * **Pointer events** * `pointerdown` * `pointermove` * `pointereup` * `pointercancel` * `pointerover` * `pointerenter` * `pointerout` * `pointerleave` * `pointerclick` * `pointerdblclick` * **Drag events** * `dragstart` * `dragmove` * `dragend` * **Transform events** * `transformstart` * `transform` * `transformend` 例如 ```htmlembedded= <div id="container"></div> ``` ```javascript= var stage = new Konva.Stage({ container: 'container', width: window.innerWidth, height: window.innerHeight, }); var layer = new Konva.Layer(); // 弄個三角形 var triangle = new Konva.RegularPolygon({ x: 80, y: 120, sides: 3, radius: 80, fill: '#00D2FF', stroke: 'black', strokeWidth: 4, }); // 三角形的事件 triangle.on('mouseout', function () { console.log('Mouseout triangle'); }); triangle.on('mousemove', function () { var mousePos = stage.getPointerPosition(); var x = mousePos.x - 190; var y = mousePos.y - 40; console.log('x: ' + x + ', y: ' + y); }); // 弄個圓形 var circle = new Konva.Circle({ x: 230, y: 100, radius: 60, fill: 'red', stroke: 'black', strokeWidth: 4, }); // 圓形的事件 circle.on('mouseover', function () { console.log('Mouseover circle'); }); circle.on('mouseout', function () { console.log('Mouseout circle'); }); circle.on('mousedown', function () { console.log('Mousedown circle'); }); circle.on('mouseup', function () { console.log('Mouseup circle'); }); layer.add(triangle); layer.add(circle); // 把所有layer加進stage中 stage.add(layer); ``` ### Drag & Drop Konva可以非常容易得讓元件變成可拖放的狀態,只需加入一段程式即可 ```javascript= circle.draggable('true'); ``` --- *參考資料: https://konvajs.org/docs/* *新手工程師的筆記,純粹記錄學了些啥東西 如果有前輩高人讀了我的文,文中有任何錯誤再麻煩指教指教*