javascript - SVG 嵌入浏览器时会失去 Javascript 交互性

标签 javascript svg interactive

我创建了一个包含 JavaScript 的 SVG 文件。

当我在 Chrome 中将此 SVG 文件作为独立文件运行时,它呈现正常。

当我将此 SVG 嵌入 HTML 页面时,它失去了交互性。

我做错了什么......?

出于各种原因,我不想使用 JQuery、D3 或将 31 行 SVG 作为文本嵌入到 HTML 页面中。

我想使用以下标签在 HTML 中嵌入交互式 SVG 文件:

<img src="SVG-STO.svg" style="width:175px  height:258px">

这是“SVG-STO.svg”文件的缩短版本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg"  id="hexMap" viewBox="18 281 175 259"  width="175" height="259" xml:space="preserve"  style = "background-color: #EEEEEE;">

<script type="text/javascript">

<![CDATA[
var objNames =  
{
"AA":{"name":"Hex A","value":"965787"},
"BB":{"name":"Hex B","value":"48986"}
};

function m_over(hover_id) { 
var objName = objNames[hover_id].name;
var objValue = objNames[hover_id].value;
document.getElementById("TEXT_NAME").innerHTML = objName;
document.getElementById("TEXT_VALUE").innerHTML = objValue;
document.getElementById(hover_id).setAttribute("fill-opacity","0.3");}

function m_out(hover_id)   {
document.getElementById(hover_id).setAttribute("fill-opacity", "1.0");
console.log(hover_id);
document.getElementById("TEXT_NAME").innerHTML = "";
document.getElementById("TEXT_VALUE").innerHTML = "";
}
]]>
</script>
<text id = "TEXT_NAME" x = "28.74" y = "301" font-family = "sans-serif" font-size = "10px" fill = "#FF00FF">Initial</text>

<text id = "TEXT_VALUE" x = "28.74" y = "321" font-family = "sans-serif" font-size = "10px" fill = "#FF00FF">Value</text>             

<path id="AA" style="stroke:#CCCCCC; stroke-width:1px; fill:#00A600;" onmouseover="m_over(this.id);" onmouseout="m_out(this.id);" d="M142.3397,326l-8.66,-15l8.66,-15h17.32l8.66,15l-8.66,15H142.3397z"/>

<path id="BB" style="stroke:#CCCCCC; stroke-width:1px; fill:#19AF00;" onmouseover="m_over(this.id);" onmouseout="m_out(this.id);" d="M142.3397,356l-8.66,-15l8.66,-15h17.32l8.66,15l-8.66,15H142.3397z"/>

</svg>

最佳答案

出于隐私原因,大多数浏览器都不允许 img 标签的 SVG 交互性(浏览器将其解释为非交互式图像)。要保留交互式 SVG 的所有功能,请使用 object 标签嵌入 SVG:

<object type="image/svg+xml" data="SVG-STO.svg" style="width:175px; height:258px"></object>

有关嵌入 SVG 文件的不同方法的详细信息,请参阅 this CSS-Tricks article .

关于javascript - SVG 嵌入浏览器时会失去 Javascript 交互性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32642240/

相关文章:

ios - 在不使用 <embed> 标签的情况下使用 <html> 在 iOS 浏览器中显示 <svg>

html - 循环中的剪辑路径在 Safari 浏览器中无法正常工作

javascript - 简单的条形进度指示器静态或动画

python - 如何为交互式 python 设置默认 PS1 值?

python - 如何处理 python 套接字中的击键?

javascript - AngularJS-ng-repeat 中的项目未在变量更新时更新

javascript - 在将 Google Closure Compiler 与 Grunt JS 结合使用时禁止创建 report.txt

javascript - React Native - 每秒多次触摸的 onTouchStart 与 PanResponder

matplotlib - 如何在 Google Colab 中使用 matplotlib 绘制交互式可绘制图像?

javascript - 用于验证 JavaScript 中字母数字值的正则表达式