html - 在 <img> 和 <object> 之间更改时,SVG 上的单击行为会发生变化

标签 html css svg graphics click

我的个人网页上有 4 个 SVG 按钮作为主菜单的一部分。

enter image description here

/-------------------------------------------------------- -------------------------------------------------- ----------------------------------/

单击其中一个按钮后,所有 4 个按钮都会缩回到 Angular 落,并显示相应的部分(即“关于我”按钮 --> “关于我”部分)。 enter image description here

最初我将 SVG 对象嵌入到 img 标签中,如下所示:

<img class = "button active" id = "person-icon" src = "resources/main-page-icons/person-icon.svg"/>

我这样做是因为我读到,当不需要对 SVG 进行动画处理时,就没有必要将其嵌入到对象/嵌入标签中。然而,我今天决定为 SVG 元素创建悬停效果。我必须将 img 标签更改为对象以允许样式/动画

<object class = "button active" id = "person-icon" data = "resources/main-page-icons/person-icon.svg" type = "image/svg+xml"></object>

悬停效果按预期工作,但现在我无法单击它。检查该元素后发现,我单击的是 SVG 本身,而不是单击的是它嵌入的对象。将其包装在 div 中也没有解决问题。

问题: 有没有办法可以在处理 SVG 元素嵌入的对象元素上的单击事件时为 SVG 元素设置动画?

如果有人问“为什么不在 SVG 元素内处理点击事件?” 我认为 SVG 元素的行为影响其他元素是不可能或没有意义的,这就是为什么我处理 SVG 元素的点击事件 OUTSIDE (即点击 1 个按钮 --> 其他按钮展开,内容淡入 = 不好)。也许可以,但我认为这没有意义,最初也没有必要。

感谢您提前提供的帮助。

最佳答案

我找到了答案here一段时间后谷歌搜索:

This kind of tag needs some content to show up on the page.

Your tag:

<object data="images/logo.svg" type="image/svg+xml" class="icon-logo"></object>

is not having any inner HTML-Content, so you won't be able to click it.

这与需要某种innerHTML 才能被 DOM 识别的对象有关。如果我添加一些文本,如 <object>Zoot!</object>然后我就可以点击它。此外,SVG DOM 与 HTML DOM 有根本的不同,并且缺少innerHTML。更多信息here .

解决方法是使用图像标签并将其包围在我可以设置动画/样式的 div 中。这在大多数情况下都有效,但在我的例子中,div 是一个圆形(边框半径:50%),当在屏幕上平移时,形状会倾斜。当应用背景/边框并且倾斜可见时,看起来很傻。不过那是另一篇文章的事了!

关于html - 在 <img> 和 <object> 之间更改时,SVG 上的单击行为会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36784030/

相关文章:

css - 如何更改 icomoon 图标的图标颜色

css - 如何在 IE9 中实现响应式 Canvas 高度

javascript - 使用 Javascript 将 GeoJSON 转换为 SVG

HTML、CSS 响应式流体布局元素

css - 除非输入文本,否则跨度的宽度和高度不会显示

javascript - 根据屏幕宽度隐藏链接标题属性 - 不会取消隐藏

html - 如何使两个并排的按钮(中间有边距)的总宽度等于前面的文本输入(100% 宽度)?

javascript - 使用 CSS/html 进行表格选择

javascript - 绑定(bind)到 SVG 组元素但在子元素上触发并在另一个元素上完成的单击事件的行为是什么?

image - 具有CMYK颜色的SVG图像-是否可以?