<html lang="en">
<head>
<title>Sketch Board - Eyal Segal Project</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
<script src="js/sketch.js"></script>
</head>
<body>
<h1 class="header">Sketch Board</h1>
<div>
<ul class="toolbar">
<li><a>Load</a></li>
<li id="Save"><a>Save</a></li>
<li id="rect"><a onclick="randRect()">Rectangle</a></li>
<li><a onclick="randOval()">Oval</a></li>
<li id="color"><input type="color" name="color" onchange="changeColor()"></li>
<!--<div class="colorPicker">
<tr>
<td style="background-color:green;"></td>
<td style="background-color:gold;"></td>
<td style="background-color:pink;"></td>
</tr>
<tr>
<td style="background-color:black;"></td>
<td style="background-color:red;"></td>
<td style="background-color:blue;"></td>
</tr>
<tr>
<td style="background-color:brown;"></td>
<td style="background-color:white;"></td>
<td style="background-color:springGreen;"></td>
</div>-->
<li id="delete" onclick="removeShape()"><a>Delete</a></li>
</ul>
<hr>
</div>
<div class="canvas" id="canvas">
</div>
</body>
</html>
document.onkeydown = function(e){
if (!e) e = window.event;
var keyCode = e.keyCode || e.which;
if (keyCode == '46'){
removeShape(event);
}
}
function randomizeColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * letters.length)];
}
return color;
}
function randomizeRectangle() {
var width = Math.random() * 250 + 50;
var height = Math.random() * 250 + 50;
if (height <= 20) {
height = 20;
}
var rotationNum = Math.round((Math.random() * 150) + 1);
var rotation = "rotate(" + rotationNum + "deg)";
var posX = Math.round(Math.random() * window.innerWidth) - (width+10);
var posY = Math.round(Math.random() * window.innerHeight) - (height+30);
var randomRecObj = {
"width": width + "px",
"height": height + "px",
"rotation": rotation,
"posX": posX,
"posY": posY
};
return randomRecObj;
}
function makeShape() {
var rect = randomizeRectangle();
var rectDOM = document.createElement("div");
rectDOM.className = "rectangle";
rectDOM.style.border = "1px solid black";
rectDOM.style.width = rect.width;
rectDOM.style.height = rect.height;
rectDOM.style.background = randomizeColor();
rectDOM.style.top = rect.posY + "px";
rectDOM.style.left = rect.posX + "px";
//rectDOM.addEventListener("click", selectShape);
// rectDOM.style.transform =rect.rotation;
return createCorners(rectDOM);
}
function createCorners(rectDOM) {
cornerUpLeft = document.createElement("div");
cornerUpRight = document.createElement("div");
cornerBtmLeft = document.createElement("div");
cornerBtmRight = document.createElement("div");
cornerUpLeft.className = "corners cornerUpLeft";
cornerUpRight.className = "corners cornerUpRight";
cornerBtmLeft.className = "corners cornerBtmLeft";
cornerBtmRight.className = "corners cornerBtmRight";
rectDOM.appendChild(cornerUpLeft);
rectDOM.appendChild(cornerUpRight);
rectDOM.appendChild(cornerBtmLeft);
rectDOM.appendChild(cornerBtmRight);
rectDOM.addEventListener("click", function (event) {
//var shapeSelected = document.getElementsByClassName("selected");
var shapeSelected = document.querySelectorAll("div[class='selected']");
var sizeSelected = [];
sizeSelected.length = shapeSelected.length;
if (!event.ctrlKey) {
for (var i = 0; i < sizeSelected.length; i++) {
if (this !== shapeSelected[0]) {
shapeSelected[0].classList.remove("selected");
}
}
}
this.classList.toggle("selected");
});
rectDOM.className += " selected";
// console.log(rectDOM);
return rectDOM;
}
function randRect() {
var rectDOM = makeShape();
var canvas = document.getElementById("canvas");
canvas.appendChild(rectDOM);
}
function randOval() {
var ovalDOM = makeShape();
ovalDOM.style.borderRadius = "50%";
var canvas = document.getElementById("canvas");
canvas.appendChild(ovalDOM);
}
function changeColor(){
var selectedShapes = document.getElementsByClassName("selected");
var len = selectedShapes.length;
for(var i=0; i<len; ++i)
{
selectedShapes[i].style.background = document.getElementsByName("color");
}
}
function removeShape(event) {
var selectedShapes = document.getElementsByClassName("selected");
var len = selectedShapes.length;
while (len > 0) {
selectedShapes[0].parentNode.removeChild(selectedShapes[0]);
--len;
}
}
function removeCorners(rectDom) {
var corners = document.getElementsByClassName("corners");
var len = corners.length;
while (len > 0) {
corners[0].classList.remove("corners");
--len;
}
}
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |