有这样一个简单的例子。
const btn = document.getElementById('generator_btn');
const textarea = document.getElementById('textarea_generator');
const generatorField = document.getElementById('generator_field');
const generatorColor = document.getElementById('generator_color');
// Массив возможных путей для фигур ... это надо переделать, но не знаю как.
const paths = [
'<path class="st1" d="M1.8 23s15.2-7.7 24-7.9 14.4-.5 23.7 7.5c9.3 8 3.6 17.9-1 20-2.7 1.3-7.9.6-6.2-5.5 1.6-5.6 7.7-9.1 16.6-12.4 8.9-3.3 28.9-8.5 32.9-12.9 2.3-2.6 2.8-6-.3-7-2-.6-5.8.6-8.1 2.9C81.3 10 78.3 15.3 79 39c.5 19-20 22.2-25.1 17.8-6.1-5.2 1.5-15.4 8.7-18.7 7.2-3.3 14.7-5.9 21.1-3.1 6.4 2.8 10.8 5 13.5 5.3 2.7.2 9.3 0 15.4-6.9"/><path class="st1" d="m110.9 40.6 4.4-9.8-10.5 3.6"/>',
'<path class="st1" d="M1.8 40.1s4.9-10 10.8-14.8c5.9-4.8 14.4-6.3 17.6-5.8 5.9.8 12.7 6.2 19.3 12.7 6.7 6.5 14.8 14.2 28.7 6.1 7.2-4.2 15.3-17.1 7.2-25.5-6.4-6.7-18 2.9-21.7 11.7-1.9 4.6-5 20 2.7 25.7 7.8 5.8 17.2 3.1 27.4-4.4 10.2-7.6 22.6-24 24-27"/><path class="st1" d="m112.6 21.1 5.6-3.9.5 8.7"/>',
'<path class="st1" d="M.8 41.8s14-21 28.3-14.3c14.4 6.7 7.2 20.3 1.7 18.5-5.9-1.9-7-20 9.4-21.8s23.6 5 32.7 8.5c9.1 3.5 33.8 6.6 44.3-10.2"/><path class="st1" d="m111.2 25.9 6.2-4-.8 6"/>'
];
generatorColor.addEventListener('input', function() {
includeSvg();
});
btn.addEventListener('click', function() {
includeSvg();
});
function includeSvg() {
let currentColor = generatorColor.value;
//
let randomPath = paths[Math.floor(Math.random() * paths.length)];
let svgCode = generateSVG(currentColor, randomPath);
textarea.value = svgCode;
generatorField.innerHTML = svgCode;
}
function generateSVG(currentColor, path) {
let startFigure = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="60" x="0" y="0" viewBox="0 0 120 64"><style>.st1{fill:none;stroke:' + currentColor + ';stroke-width:2;stroke-linecap:round;stroke-linejoin:round}</style>';
let endFigure = '</svg>';
return startFigure + path + endFigure;
}
body {
margin: 0;
}
#generator_btn {
margin: 0;
display: inline-block;
padding: 10px 15px;
font-weight: 700;
vertical-align: top;
}
#generator_color {
height: 40px;
}
#textarea_generator {
display: block;
width: 100%;
max-width: 90vw;
margin: 10px 0;
}
<div class="gen_block">
<button id="generator_btn">Generator SVG</button>
<input type="color" id="generator_color" name="generator_color" value="#FE6C3B" />
</div>
<textarea id="textarea_generator" name="generator_svg" rows="4"></textarea>
<div id="generator_field"></div>
这个想法是通过单击按钮来创建一个像这样的随机路径生成器......很疯狂,但我不知道如何实现它。本质上,svg
该元素由两条路径组成。第一条是一条令人困惑的曲线(但应该有一个平滑的过渡),第二条是一条在此路径中结束的箭头。svg
嗯,生成的路径的动态着色,以便您可以在保存之前为元素分配颜色。请告诉我如何在元素的这个区域内创建这些随机路径?
代码中添加了一个按钮,用于显示构造曲线的控制段。这些段并非完全随机:第一个段从设计的左边缘开始,然后几个段位于设计的顶部和底部边缘,最后一个段在右边缘结束。
所有控制段的末端都位于绘图的内部或边缘。这确保了曲线也完全位于内部。
要了解语法,请
SVG path
在此处查看三次贝塞尔曲线的运算符:https://developer.mozilla.org/ru/docs/Web/SVG/Tutorial/Paths
其余信息也不会造成影响,但这是本示例框架内的主要内容。
ps实际上是添加了一行然后随机添加的,所以结果是这样的...)))
// 根据你的回答
路人注意事项:
如果您想为您的护照发明一个签名,那么这个是完美的:3
更新 15 01 2024 / 19:25
拉伸视图框,放大屏幕截图,让它随机变得更有趣,并破坏它,这样它就不会干扰滚动:3
更新 16 01 2024 / 23:35
添加了箭头标记
来源https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker
片段中的 ps 因为放大了,观看没有用,展开到全屏
感谢@XelaNimed 的选择,我们成功创建了一个随机路径生成器。但质量不适合我......它不适用于循环,只能使用轨道附近的随机直线。也许有人知道如何改进它,使其看起来更平滑并且不会超出该区域的过道
SVG
?尝试使用类似的库: kute.js