###### tags: `konva`, `canvas`, `javascript` # 【自學筆記】konva入門 - Selectors `Konva`是個`HTML5 Canvas JavaScript`的框架,透過`2d context`的擴展實現各種圖形功能,正好可以實現最近工作需求,就來研究看看囉 --- ### Konva的Selectors Konva可以使用`find()`,輕鬆得找到元素 共有三種方式:[範例](https://codepen.io/niodoshaba-the-flexboxer/pen/YzaKeQR) :::info Select By Id ::: 在創建圖形的時候,給他一個id的屬性,就可以透過`findOne('#id')`找到他了 ```htmlembedded= <div id="container"></div> <div id="buttons"> <!-- 用來觸發find() --> <input type="button" id="RectId" value='RectId'/> </div> ``` ```javascript= // 先創建一個Stage var stage = new Konva.Stage({ container: 'container', width: 500, height: 500 }); // 然後創建一個layer var layer = new Konva.Layer(); // 用創建一個圖形,並設定Id var rect = new Konva.Rect({ x: 300, y: 90, width: 100, height: 50, fill: 'green', strokeWidth: 3, offset: { x: 50, y: 25, }, draggable: true, id: 'RectId', }); layer.add(rect); stage.add(layer); // 畫出來 layer.draw(); // 用find()找到id document.getElementById('RectId').addEventListener('click',function () { var find_id = layer.findOne('#RectId'); console.log(RectId) }); ``` :::info Select By Type ::: 透過find()也可以找到所有相同的圖形種類 ```htmlembedded= <div id="container"></div> ``` ```javascript= // 先創建一個Stage var stage = new Konva.Stage({ container: 'container', width: 500, height: 500 }); // 然後創建一個layer var layer = new Konva.Layer(); // 用迴圈創建一堆circle for (var n = 0; n < 10; n++) { var circle = new Konva.Circle({ x: Math.random() * stage.width(), y: Math.random() * stage.height(), radius: Math.random() * 50 + 25, fill: 'red', strokeWidth: 3, stroke: 'black', }); layer.add(circle); } stage.add(layer); // 畫出來 layer.draw(); // 用find()找到所有的circle var find_circle = layer.find('Circle'); console.log(find_circle) ``` :::info Select By Name ::: 在創建圖形的時候,給他一個name的屬性,就可以透過`find('.name')`找到他了 (類似`css class`) ```htmlembedded= <div id="container"></div> <div id="buttons"> <!-- 用來觸發find() --> <input type="button" id="RectName" value='RectName'/> </div> ``` ```javascript= // 先創建一個Stage var stage = new Konva.Stage({ container: 'container', width: 500, height: 500 }); // 然後創建一個layer var layer = new Konva.Layer(); // 用創建多個圖形,並設定name var name1 = new Konva.Rect({ x: 100, y: 20, width: 12, height: 33, fill: 'blue', strokeWidth: 3, offset: { x: 50, y: 25, }, draggable: true, name: 'blue', }); layer.add(name1); // 用創建多個圖形,並設定name var name2 = new Konva.Rect({ x: 120, y: 40, width: 12, height: 33, fill: 'blue', strokeWidth: 3, offset: { x: 50, y: 25, }, draggable: true, name: 'blue', }); layer.add(name2); // 用創建多個圖形,並設定name var name3 = new Konva.Rect({ x: 140, y: 60, width: 12, height: 33, fill: 'blue', strokeWidth: 3, offset: { x: 50, y: 25, }, draggable: true, name: 'blue', }); layer.add(name3); stage.add(layer); // 畫出來 layer.draw(); // 用find()找到所有的name (類似css class) document.getElementById('name').addEventListener('click',function () { var find_class = layer.find('.blue') console.log(find_class) }); ``` --- *參考資料: https://konvajs.org/docs/* *新手工程師的筆記,純粹記錄學了些啥東西 如果有前輩高人讀了我的文,文中有任何錯誤再麻煩指教指教*