<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.6/fabric.js"></script>
</head>
<body>
<canvas id="my-canvas" width="640" height="640"></canvas>
</body>
</html>
var canvas = new fabric.Canvas(document.querySelector('#my-canvas'));
var circleConfig = {
radius: 200,
fill: '',
stroke: '#333',
originX: 'center',
originY: 'center'
};
drawCircle(circleConfig);
var count = 10;
var commonRectConfig = {
width: 25,
height: 110,
fill: '',
stroke: '#333'
};
var innerRadius = circleConfig.radius - commonRectConfig.height;
var innerCircum = innerRadius * 2 * Math.PI;
var angleStep = 360 / count;
var angle = 0;
var rectRadius = circleConfig.radius - commonRectConfig.height / 2;
for(var i = 0; i < count; i++) {
var radAngle = angle * Math.PI / 180;
var rectConfig = Object.assign({
left: canvas.getHeight() / 2 + rectRadius * Math.cos(radAngle),
top: canvas.getWidth() / 2 + rectRadius * Math.sin(radAngle),
aLeft: canvas.getHeight() / 2 + (rectRadius-10) * Math.cos(radAngle),
aTop: canvas.getWidth() / 2 + (rectRadius-10) * Math.sin(radAngle),
angle: angle + 90,
originX: "center",
originY: "center"
}, commonRectConfig)
angle += angleStep;
drawRectangle(rectConfig);
}
numberRect();
markAsterisk();
function markAsterisk() {
canvas.getObjects('text').forEach(number => {
addAsterisk(number, '*')
})
}
function numberRect() {
let currentNumber = 1;
canvas.getObjects('rect').forEach((rect) => {
addNumber(rect, currentNumber);
currentNumber++;
});
}
function addAsterisk(fnumber, value) {
let numberConfig = getNumberConfig(fnumber);
let number = createText(value, numberConfig);
let rect = canvas.getObjects('rect').find(r=> {
return r.number.text ===fnumber.text;
})
number.set('top', rect.aTop);
number.set('left', rect.aLeft);
this.canvas.add(number);
this.canvas.bringToFront(number);
}
function addNumber(rect, value) {
let numberConfig = getNumberConfig(rect);
let number = createText(value, numberConfig);
rect.number = number;
this.canvas.add(number);
this.canvas.bringToFront(number);
}
function getNumberConfig(rect) {
let top, left;
let centerPoint = rect.getCenterPoint();
top = centerPoint.y;
left = centerPoint.x;
let scaleX = rect.scaleX || 1;
let scaleY = rect.scaleY || 1;
let angle = rect.angle || 0;
return {
top: top,
left: left,
originX: 'center',
originY: 'center',
fontSize: 12,
fill: 'red',
selectable: false,
scaleX: scaleX,
scaleY: scaleY,
angle: angle
}
}
function createText(text, config) {
let textF = new fabric.Text(text.toString(), config);
return textF;
}
function drawCircle(config) {
var circle = new fabric.Circle(config);
canvas.add(circle);
circle.center();
}
function drawRectangle(config) {
var rect = new fabric.Rect(config);
canvas.add(rect);
}
Output
300px
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. |