Sta*_*ale 20 html javascript svg
我制作了一个SVG图像,或者更像是迷你应用程序,用于查看数据图形.我想将它包含在HTML页面中,并调用SVG图像上的方法.
例:
<object id="img" data="image.svg" width="500" height="300"/>
<script>document.getElementById("img").addData([1,23,4]);</script>
Run Code Online (Sandbox Code Playgroud)
是否可以在SVG文档上调用方法?如果是这样,我如何声明要在SVG文件中公开的方法,以及如何从HTML文档中调用它们?
Sta*_*ale 11
解:
在svg中:
<script>document.method = function() {}</script>
Run Code Online (Sandbox Code Playgroud)
在html中(使用原型来添加事件监听器):
<script>$("img").observe("load", function() {$("img").contentDocument.method()});
Run Code Online (Sandbox Code Playgroud)
您需要在图像上侦听加载事件.加载图像后,您可以使用它element.contentDocument
来访问svg文档上的文档变量.添加的任何方法都将可用.
几年前,我被要求使用 SVG 创建一个基于 Ajax 的 2 人游戏。它可能不是您正在寻找的解决方案,但它可以帮助您侦听 SVG 中的事件。这是 SVG 控制器:
仅供参考,SVG 被拖放(这是 Stratego)
/****************** Track and handle SVG object movement *************/
var svgDoc;
var svgRoot;
var mover=''; //keeps track of what I'm dragging
///start function////
//do this onload
function start(evt){
//set up the svg document elements
svgDoc=evt.target.ownerDocument;
svgRoot=svgDoc.documentElement;
//add the mousemove event to the whole thing
svgRoot.addEventListener('mousemove',go,false);
//do this when the mouse is released
svgRoot.addEventListener('mouseup',releaseMouse,false);
}
// set the id of the target to drag
function setMove(id){ mover=id; }
// clear the id of the dragging object
function releaseMouse(){
if(allowMoves == true){ sendMove(mover); }
mover='';
}
// this is launched every mousemove on the doc
// if we are dragging something, move it
function go(evt){
if(mover != '' && allowMoves != false) {
//init it
var me=document.getElementById(mover);
//actually change the location
moveX = evt.clientX-135; //css positioning minus 1/2 the width of the piece
moveY = evt.clientY-65;
me.setAttributeNS(null, 'x', evt.clientX-135);
me.setAttributeNS(null, 'y', evt.clientY-65);
}
}
function moveThis(pieceID, x, y) {
$(pieceID).setAttributeNS(null, 'x', x);
$(pieceID).setAttributeNS(null, 'y', y);
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序是纯 SVG + JavaScript,但这就是它的要点。
事情实际上比你想象的要简单.你真的不需要阅读复杂的教程来理解这个概念,你也不必使用JQuery.这是基本布局:
html文档中的JavaScript函数.
<script type="text/javascript">
function change(){
var s=document.getElementById("cube");
s.setAttribute("stroke","0000FF");
}
</script>
Run Code Online (Sandbox Code Playgroud)我们试图操纵的SVG元素.
<svg width=100 height=100 style='float: left;'>
<rect x="10" y="10" width="60" height="60" id="cube" onclick="change()" stroke=#F53F0C stroke-width=10 fill=#F5C60C />
</svg>
Run Code Online (Sandbox Code Playgroud)一个内联按钮,可以触发更改.请注意,在我的示例中,也可以通过单击多维数据集本身来触发事件.
<button onclick="change()">Click</button>
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
15328 次 |
最近记录: |