【问题标题】:Auto update script js/svg自动更新脚本 js/svg
【发布时间】:2012-02-06 08:36:48
【问题描述】:

我无法解决这个问题,为什么它只更新最后一个标签(id),而不是一个一个地更新 这是我的第一个 fun(),它从 file.svg 的 onload 开始:

function refresh()
{
    totalUpdate();
    var t=setTimeout("refresh()",2000);
}

下面是函数:

function totalUpdate()
{
    //user array with elements on user ID
    var tags = document.getElementById("user").getElementsByTagName("circle");

    for(var i=0;i<=document.getElementById('user').childElementCount;i++)
    {   

        var tag=null,id=null,url=null;
        id=tags[i].getAttribute("id");
        tag=tags[i];
        url="get.php?id="+id;
        $.get(url,function(data){
            updateDATA(tag, data);
        });
    }
}

function updateDATA(tag, data){
    data=data.split(" ");
    //data[0]=>x data[1]=>y data[2]=>data
    var x,y;

    //$x=(($x*1000000-$bx)*$svgwidth/$mx*-1)*1000000;
    x=((data[0]*1000000-20959350)*352/3615);
    y=((data[1]*1000000-41989603)*662/5391)*-1;

    tag.setAttribute("cx",x+4);
    tag.setAttribute("cy",y+5);
}

SVG 正文:

<g id='user'>


    <circle class="user" id="1" cy="329" cx="179" r="5" style="fill:red">
        <animate attributeType="CSS" attributeName="opacity" from="1" to="0" dur="1s" repeatCount="indefinite" />
  </circle>


    <circle class="user" id="2" cy="366" cx="189" r="5" style="fill:green">
        <animate attributeType="CSS" attributeName="opacity" from="1" to="0" dur="1s" repeatCount="indefinite" />
  </circle>
  </g>

只更新第二个元素而不是两个元素的函数!?

【问题讨论】:

    标签: php javascript jquery svg


    【解决方案1】:

    Javascript 具有词法作用域,而$.get 是异步的,因此在调用updateDATAtag 引用列表中的最后一个元素tags。您可以通过使用函数包装异步调用来解决此问题。

    查看此演示,其中$.get 替换为setTimeouthttp://jsfiddle.net/GuGb4/

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2010-12-17
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多