评论资讯 [ 总 21 则 ]
·飞 - 2026-7-21 13:23
·飞飞 - 2026-5-6 08:17
·悄然 - 2026-5-6 08:16
·飞飞 - 2026-5-6 08:13
·悄然 - 2026-3-26 10:46
·飞飞 - 2026-3-21 10:00
·悄然 - 2026-3-21 10:00
·小白 - 2026-3-21 09:59
·飞飞 - 2026-3-20 14:21
·悄然 - 2026-3-16 16:58
·飞飞 - 2026-5-6 08:17
·悄然 - 2026-5-6 08:16
·飞飞 - 2026-5-6 08:13
·悄然 - 2026-3-26 10:46
·飞飞 - 2026-3-21 10:00
·悄然 - 2026-3-21 10:00
·小白 - 2026-3-21 09:59
·飞飞 - 2026-3-20 14:21
·悄然 - 2026-3-16 16:58
友情链接
网站统计
利用 SVG path 重绘模拟示波图
<h1>点击页面任意地方运行/暂停曲线重绘</h1>
<svg id="msvg" widt="800" height="400" viewBox="0 0 400 200" xmlns="http://www.w3.org/2000/svg">
<path id="p1" d="M0 100 H400" fill="none" stroke="red" stroke-width="4" stroke-dasharray="4" stroke-linejoin="round">
<animate attributeName="stroke-dashoffset" from="0" to="-360" dur="10s" repeatCount="indefinite" />
</path>
</svg>
<script>
var timeID, go = false; // timeID : 定时器标识、go : 动画开关
// 页面点击事件
document.onclick = () => {
go = !go; // go开关取反
draw(); // 执行draw 函数
};
function draw() {
var tt = 31; // 路径节点总数
var str = ''; // 路径字符串
// 遍历节点、生成动态路径
Array.from({length: tt}).forEach((_,k) => {
var x = (k + 1) * (380 / tt); // 节点X坐标
// 节点Y坐标 :节点序列号被2整除定在中央,否则随机
var y = k % 2 === 0 ? 100 : Math.floor(Math.random() * 200);
// 拼接路径字串 :开始时是M指令,其余L指令
str += k === 0 ? `M0 100 H${x}` : ` L${x} ${y}`;
});
var path = `${str}L400 100`; // 路径终点
p1.setAttribute('d', path); // 给path d属性赋值
// setTimeout定时器递归调用本函数 :根据 go 开关运行或取消动画
go ? timeID = setTimeout(draw, 200) : cancelTimeout(timeID);
}
</script>
前一篇: SVG动态模拟示波图
下一篇: 纯CSS实现卡片正北两面翻转
发表评论:
评论列表 [0条]

