JSFiddle - React, Tailwind, and code Playground
by 20yco
HTML
<script src="https://cdn.rawgit.com/konvajs/konva/2.3.0/konva.min.js"></script>
<div id="canvas-container" style="z-index: 1">
<div id="canvas"></div>
</div>
CSS
.canvas-container{
width: 100%;
}
#canvas{
position: absolute;
top: 20;
left: 20;
z-index: 10;
background-color:rgba(255,0,0,0.5);
}
JavaScript
var Canvas = (function() {
var funct = {};
var stageWidth,stageHeight,stage,layer,circle,rect,myPlayer,textNode,tr;
funct.stageInit = function(){
stage = new Konva.Stage({
container: 'canvas',
width: stageWidth,
height: stageHeight
});
layer = new Konva.Layer();
stage.add(layer);
funct.addText();
funct.makeTextResizeable();
layer.draw();
}
funct.addText = function(){
textNode = new Konva.Text({
text: 'Some text here',
x: 50,
y: 50,
width: 50,
height: 50,
fontSize: 20,
draggable: true,
});
layer.add(textNode);
textNode.on('dblclick', () => {
// create textarea over canvas with absolute position
// first we need to find its positon
var textPosition = textNode.getAbsolutePosition();
var stageBox = stage.getContainer().getBoundingClientRect();
var areaPosition = {
x: textPosition.x + stageBox.left,
y: textPosition.y + stageBox.top
};
// create textarea and style it
var textarea = document.createElement('textarea');
document.body.appendChild(textarea);
textarea.value = textNode.text();
textarea.style.position = 'absolute';
textarea.style.top = areaPosition.y + 'px';
textarea.style.left = areaPosition.x + 'px';
textarea.style.width = textNode.width();
textarea.style.zIndex = 15;
textarea.focus();
textarea.addEventListener('keydown', function (e) {
if (e.keyCode === 13) {
textNode.text(textarea.value);
layer.draw();
document.body.removeChild(textarea);
}
});
});
}
funct.makeTextResizeable = function(){
tr = new Konva.Transformer({
boundBoxFunc: function (oldBoundBox, newBoundBox) {
if (newBoundBox.width > 200 ||...