讲师中心 微信公众号
AI工具推荐 视频效率加速

SVG 内联 JavaScript 实现元素循环切换(含环绕逻辑)

胖瑶小哥_5977

胖瑶小哥_5977

发布时间:2026-02-21 18:55:00

|

782人浏览过

|

来源于php中文网

原创

SVG 内联 JavaScript 实现元素循环切换(含环绕逻辑)

本文详解如何在纯 SVG 文件中通过内联 JavaScript 实现分组元素的左右循环切换,支持无缝环绕、类名动态控制与 CSS 可见性管理,所有代码均嵌入 <svg> 标签内,兼容 <object> 嵌入方式。

本文详解如何在纯 svg 文件中通过内联 javascript 实现分组元素的左右循环切换,支持无缝环绕、类名动态控制与 css 可见性管理,所有代码均嵌入 `` 标签内,兼容 `` 嵌入方式。

在 SVG 中实现交互式导航(如左右切换高亮项)时,若受限于“仅允许内联脚本、禁止外部 HTML/JS”的环境(例如通过 <object> 嵌入 SVG),需充分利用 SVG 原生 DOM API 与 CSS 类控制机制。核心思路是:通过 CSS 类(如 .on)控制可见性,用 JavaScript 动态查找、移除和添加该类,并借助模运算(%)实现首尾自动环绕。

以下为完整、健壮且可直接复用的实现方案:

✅ 正确的内联 JS 实现逻辑

SVG 中的 <script> 必须置于文档末尾(在所有图形元素之后),确保 DOM 已就绪。关键点在于:

  • 使用 document.querySelector('svg > .cls-security.on') 精确定位当前激活项;
  • 提取其内部 <text> 的文本内容作为逻辑索引(如 "1" → 1);
  • 利用 (current + offset + n) % n 公式安全计算新索引(避免负数取模异常);
  • 通过 querySelector 定位目标元素并切换 .on 类。
<script>//<![CDATA[
  function cycleLeft() {
    const current = document.querySelector('svg > .cls-security.on');
    if (!current) return;
    const textContent = current.querySelector('text').textContent.trim();
    // 将文本转为数字;"X"等非数字设为0,参与模运算
    const idx = isNaN(textContent) ? 0 : parseInt(textContent, 10);
    const total = 9; // net-0 至 net-8,共9项
    const nextIdx = (idx - 1 + total) % total; // 向左:-1 → 自动绕回8

    current.classList.remove('on');
    const target = document.querySelector(`svg > .cls-security.net-${nextIdx}`);
    if (target) target.classList.add('on');
  }

  function cycleRight() {
    const current = document.querySelector('svg > .cls-security.on');
    if (!current) return;
    const textContent = current.querySelector('text').textContent.trim();
    const idx = isNaN(textContent) ? 0 : parseInt(textContent, 10);
    const total = 9;
    const nextIdx = (idx + 1) % total; // 向右:+1 → 自动绕回0

    current.classList.remove('on');
    const target = document.querySelector(`svg > .cls-security.net-${nextIdx}`);
    if (target) target.classList.add('on');
  }
//]]></script>

? 说明:net-0 对应 "X",虽非数字,但统一按 0 处理,符合设计意图;(idx - 1 + total) % total 是 JavaScript 中处理负数模运算的标准写法(如 -1 % 9 === -1,而 (-1 + 9) % 9 === 8)。

立即学习“Java免费学习笔记(深入)”;

js2java
js2java

JavaScript 到 Java 全栈翻译助手,专为前端开发者学习 Java 或快速实现后端业务逻辑而设计。当用户提到以下场景时必须使用此技能: - "帮我把这段 JS 代码转成 Java" - "用 Java 怎么写这个逻辑" - "我习惯用 JS 写,想翻译成 Java" - "教我 Java,我要写后端接...

下载

? CSS 配合要点(必须保留)

确保 <defs><style> 中的样式规则正确生效:

.cls-security { visibility: hidden; }
.cls-security.on { visibility: visible; }

⚠️ 注意:不要使用 display: none,因 SVG 中 visibility: hidden 保持布局占位,更适合视觉切换;display: none 可能干扰 <a> 包裹的交互区域。

⚠️ 重要注意事项

  • 执行上下文:SVG 内联脚本中的 document 指向 SVG 文档本身(即 SVGDocument),而非外层 HTML 页面,因此 document.querySelector 安全可用。
  • 浏览器兼容性:现代浏览器(Chrome/Firefox/Safari/Edge)均支持 SVG 内联脚本;IE 已淘汰,无需兼容。
  • 初始化要求:初始状态必须有且仅有一个元素同时具有 .cls-security 和 .on 类(如示例中 net-1),否则 cycleLeft/cycleRight 将无操作。
  • 性能与可维护性:本方案基于语义化类名(net-0…net-8)和文本内容驱动,比依赖 DOM 顺序索引更鲁棒——即使调整 <g> 排序或插入新项,逻辑仍有效。

✅ 最终验证建议

将上述 <script> 插入原始 SVG 的 </svg> 闭合标签之前,保存为 .svg 文件,再通过以下 HTML 测试:

<object data="security-panel.svg" type="image/svg+xml" width="132" height="72"></object>

点击左右箭头,即可观察颜色块与数字按预期循环切换,首尾自然衔接。

此方案简洁、可靠、符合 SVG 规范,是内联交互式 SVG 的推荐实践。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2706

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5259

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3767

2026.03.24

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2942

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2614

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

3032

2025.04.24

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4316

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1335

2023.07.28

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn