JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://rawgit.com/Alexander-0x80/floweroflife.js/master/src/floweroflife.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js"></script>
JavaScript
var size_x = 800, size_y = 600;
var radius = 40;
var layers = 5;
var steps = 2;
var fill_opacity = 0.2;
var step, layer, point, circle;
var circles = [];
var s = Snap(size_x, size_y);
var f = flower(size_x / 2, size_y / 2, radius, 5);
var colors = [
"#FF0000",
"#FF8000",
"#FFFF00",
"#40FF00",
"#00FFFF",
"#0000FF",
"#BF00FF"
];
var layers = f.layers();
var points = f.points();
var g1 = s.g(); // Store all of our circles here for masking later
for(step = 0; step <= steps; step++ ) {
// Each step generates another opacity layer
for(layer = 0; layer < layers.length; layer++) {
for(point = 0; point < layers[layer].length; point++) {
circle = s.circle(
layers[layer][point].x,
layers[layer][point].y, radius);
circle.attr({
fill: colors[layer],
fillOpacity: fill_opacity
});
g1.add(circle);
}
}
}
// Generate stoked circles above the colors
for (point = 0; point < points.length; point++) {
var circle = s.circle(points[point].x, points[point].y, radius);
circle.attr({
fill: "#ff",
stroke: "#000",
strokeWidth: 2,
fillOpacity: 0
});
g1.add(circle);
}
// Mask final sturcure with a circle
var ring = s.circle(size_x / 2, size_y / 2, radius * 4)
ring.attr({ fill: "#fff" });
g1.attr({ mask: ring });
// outermoust border
s.circle(size_x / 2, size_y / 2, radius * 4).attr({
fill: "#ff",
stroke: "#000",
strokeWidth: 2,
fillOpacity: 0
})