<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Starter Template for Bootstrap</title>
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="http://getbootstrap.com/examples/starter-template/starter-template.css" rel="stylesheet">
<link href="style.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">FabricJs</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container" style="padding: 0px;width: 100%;">
<div class="starter-template">
<div class="row" style="padding:0px">
<div class="col-md-4 col-sm-4">
<div class="row">
<div class="col-xs-9">
Background Color
</div>
<div class="col-xs-3">
<input type="color" id="bg_color">
</div>
</div>
<br>
<div class="row">
<div class="col-xs-9">
<input type="text" id="new_text" class="form-control" placeholder="Add new text here">
</div>
<div class="col-xs-3">
<input type="button" id="btn_add_new" class="btn btn-primary" value="Add">
</div>
</div>
</div>
<div class="col-md-7 col-sm-7">
<canvas width="500" height="500" id="canvas"></canvas>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://fabricjs.com/lib/fabric.js"></script>
<script src="script.js"></script>
</body>
</html>
var canvas = new fabric.Canvas("canvas");
canvas.backgroundColor = '#666';
canvas.renderAll();
$('#bg_color').on('input', function() {
canvas.backgroundColor = $('#bg_color').val();
canvas.renderAll();
});
$('#btn_add_new').click(function(e) {
e.preventDefault();
if($('#new_text').val() !== '')
{
var newText = new fabric.IText($('#new_text').val(), {
fontFamily: "Arial",
left: 10,
top: 10,
fontSize: 20,
textAlign: "left",
fill: '#fff',
});
canvas.add(newText);
canvas.renderAll();
$('#new_text').val('');
}
});
canvas.on('object:selected', function(e) {
onObjectSelected(e, canvas);
});
canvas.on('selection:cleared', function(e) {
onSelectionCleared(canvas);
});
function onObjectSelected(e, canvas){
showImageTools(e.target, canvas);
}
function onSelectionCleared(side){
$('#customBox').remove();
}
function removeLayers(index){
canvas.getObjects()[index].remove();
}
function showImageTools (e, side) {
var url = 'customBox.html';
$.get(url, function(data) {
if (!$('#customBox').length) {
$('body').append("<div id='customBox' style='position: absolute; top: 10; left: -50'><h3>"+data+"</h3></div>");
}
moveImageTools(e, side);
});
}
function moveImageTools (e, side) {
var w = $('#customBox').width();
var h = $('#customBox').height();
var coords = getObjPosition(e, side);
var top = coords.bottom+10;
var left = coords.left;
$('#customBox').show();
$('#customBox').css({top: top, left: left});
}
function getObjPosition (e, side) {
var rect = e.getBoundingRect();
var offset = side.calcOffset();
var bottom = offset._offset.top + rect.top + rect.height;
var right = offset._offset.left + rect.left + rect.width;
var left = offset._offset.left + rect.left;
var top = offset._offset.top + rect.top;
return {left: left, top: top, right: right, bottom: bottom};
}
/* Styles go here */
canvas{
border: 1px solid #000;
}
div.overlay {
display: table;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999;
}
div.overlay > div {
display: table-cell;
width: 100%;
height: 100%;
background: #fff;
text-align: center;
vertical-align: middle;
}
.arrow_box {
position: relative;
background: #f0f0f0;
border: 1px solid #444;
padding: 10px 5px 0px 5px;
}
.arrow_box:after, .arrow_box:before {
bottom: 100%;
left: 10%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.arrow_box:after {
border-color: rgba(184, 184, 184, 0);
border-bottom-color: #f0f0f0;
border-width: 5px;
margin-left: -5px;
}
.arrow_box:before {
border-color: rgba(0, 0, 0, 0);
border-bottom-color: #000000;
border-width: 6px;
margin-left: -6px;
}
<div id="customBox">
<div class="arrow_box">
<a class="button alert tiny" id="remove_layers">X</a>
<a class="button secondary tiny" id="move_up_layers">Move Up</a>
<a class="button secondary tiny" id="move_down_layers">Move Down</a>
</div>
</div>