Скрипт автообновления js / svg - PullRequest
0 голосов
/ 10 января 2012

Я не могу это исправить, поэтому он обновляет только последний тег (id), а не один за другим Это моя первая забава (), которая начинается с загрузки файла.svg:

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>

Функции обновления только второго элемента, а не их обоих!?

1 Ответ

0 голосов
/ 10 января 2012

Javascript имеет лексическую область видимости, а $.get асинхронный, поэтому к моменту вызова updateDATA tag ссылается на последний элемент в списке tags. Это можно исправить, обернув асинхронный вызов функцией.

Проверьте это демо, где $.get заменено на setTimeout: http://jsfiddle.net/GuGb4/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...