【发布时间】:2019-01-19 04:17:23
【问题描述】:
我的目标是通过滚动鼠标滚轮来更改 SVG 中的 viewBox 属性,该属性通过 websocket 从 API 服务器检索。我这样做的方式如下:
-
生成
<object id={"std-chart"} class="mouse-wheel-pannable" type="image/svg+xml" /> -
当从 websocket 获取数据
svgStr时,将其动态放入<object>元素中。let obj = document.getElementById('std-chart'); var objUrl = 'data:image/svg+xml;utf8,'+ svgStr; obj.setAttributeNS(null,'data',objUrl);
svgStr 类似于:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1081" height="184" viewBox="0 0 1081 184" >
<path d="M 0.0 98.7 L 0.3 98.7 .../>
</svg>
第一季度。我不太清楚为什么需要在svgStr 前面添加data:image/svg+xml;utf8,。否则,图片将无法显示。
-
在我的 mouseWheelScroll() 函数中,我尝试找到这个 svg 元素并更改它的 viewBox。但是我找不到 svg 元素,因为
contentDocument返回 null。var svgObjs = document.getElementsByClassName("mouse-wheel-pannable"); var svgObj = svgObjs[0].contentDocument; //svgObj returns null var svg = svgObj.getElementsByTagName('svg')[0]; //error here svg.setAttributeNS(null, 'viewBox', someNewViewBox);问题。如何获得有效的 contentDocument。即
<svg>元素,这样我就可以改变viewBox?
谢谢。
我尝试使用<embed> 而不是<object>,从Chrome 控制台我看到了嵌入项,但是仍然如何获得下面的<svg>?下图中的<svg> 还有效吗?
Please click here to see the chrome console for it.
谢谢。
做了更多的测试。如果我在第一个开头设置<object data=xxxxxx.svg/>,即如果我将svg 内容存储在一个文件中并在初始化<object> 时加载,则一切正常。然后我认为问题是如何动态地让<object>“重新加载”svg 内容。
谢谢。
【问题讨论】:
标签: javascript svg