<div id="container">
<div id="ui">
<div style="display: flex">
<label for="rx">Radius X: </label>
<input type="range" id="rx" name="rx" min="0" max="500" step="1" value="250">
<span id="rx-val">250</span>
</div>
<div style="display: flex">
<label for="ry">Radius Y: </label>
<input type="range" id="ry" name="ry" min="0" max="500" step="1" value="250">
<span id="ry-val">250</span>
</div>
<div style="display: flex">
<label for="large-arc">Large Arc Flag: </label>
<input type="checkbox" id="large-arc" name="large-arc">
</div>
<div style="display: flex">
<label for="sweep">Sweep Flag: </label>
<input type="checkbox" id="sweep" name="sweep">
</div>
</div>
</div>
body {
margin: 0;
background-color: #202020;
}
#container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
#ui {
position: absolute;
top: 30px;
left: 33%;
transform: translateX(-33%);
color: white;
font-family: Arial, Helvetica, sans-serif;
}
import { SvJs, Gen } from "https://cdn.jsdelivr.net/npm/svjs@latest/dist/svjs.min.js";
// Parent SVG.
const svg = new SvJs().addTo(document.getElementById("container"));
// Viewport and viewBox (1:1 aspect ratio).
const svgSize = Math.min(window.innerWidth, window.innerHeight);
svg.set({ width: svgSize, height: svgSize, viewBox: "0 0 1000 1000" });
// Background.
svg.create("rect").set({
x: 0,
y: 0,
width: 1000,
height: 1000,
fill: "#181818"
});
// Elliptical Arc Curve.
let arc = svg.create("path").set({
fill: "none",
stroke: "purple",
stroke_width: 5,
d: "M 300 500 A 250 250 0 0 0 700 500"
});
// UI controls.
let radiusX = document.getElementById("rx");
let radiusY = document.getElementById("ry");
let largeArc = document.getElementById("large-arc");
let sweep = document.getElementById("sweep");
// UI update function.
function updateUI() {
let rx = radiusX.value;
let ry = radiusY.value;
let la = largeArc.checked ? "1" : "0";
let sw = sweep.checked ? "1" : "0";
arc.set({
d: `M 300 500 A ${rx} ${ry} 0 ${la} ${sw} 700 500`
});
document.getElementById("rx-val").innerText = rx;
document.getElementById("ry-val").innerText = ry;
}
// Attach event listenters to each input.
radiusX.addEventListener("input", () => {
updateUI();
});
radiusY.addEventListener("input", () => {
updateUI();
});
largeArc.addEventListener("change", () => {
updateUI();
});
sweep.addEventListener("change", () => {
updateUI();
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.