problemas de desempenho em javascript manipulador onclick

votos
1

Eu escrevi um jogo em java script e enquanto ele funciona, ele é lento responder a vários cliques. Abaixo está uma versão muito simplificada do código que estou usando para lidar com cliques e ainda é não responder a um segundo clique de 2, se você não esperar o tempo suficiente. Isto é algo que eu preciso apenas aceitar ou existe uma maneira mais rápida para estar pronto para o próximo clique?

BTW, eu anexar esta função usando AddEvent do concurso quirksmode recodificação.

var selected = false;
var z = null;
function handleClicks(evt) {
    evt = (evt)?evt:((window.event)?window.event:null);
    if (selected) {
        z.innerHTML = '<div class=rowbox a>a</div>';
        selected = false;
    } else {
        z.innerHTML = '<div class=rowbox selecteda>a</div>';
        selected = true;
    }
}

O código ao vivo pode ser visto no http://www.omega-link.com/index.php?content=testgame

Publicado 19/05/2009 em 21:26
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Você poderia tentar mudar apenas o nome da classe em vez de remover / adicionar um div ao DOM (que é o que a propriedade innerHTML faz).

Algo como:

var selected = false;
var z = null;

function handleClicks(evt) 
{
    var tmp;

    if(z == null)
       return;

    evt = (evt)?evt:((window.event)?window.event:null);
    tmp = z.firstChild;
    while((tmp != null) && (tmp.tagName != 'DIV'))
        tmp = tmp.firstChild;
    if(tmp != null)
    {
      if (selected) 
      {
        tmp.className = "rowbox a";
        selected = false;
      } else 
      {
        tmp.className = "rowbox selecteda";
        selected = true;
      }
    }
}
Respondeu 19/05/2009 em 21:40
fonte usuário

votos
2

Eu acho que o problema é que o segundo clique é registrar como um evento dblclick, não como um evento de clique. A mudança está acontecendo rapidamente, mas o segundo clique é ignorado a menos que você espera. Gostaria de sugerir a mudança, quer ao mousedown ou evento mouseup.

Respondeu 19/05/2009 em 21:40
fonte usuário

votos
1

Sim, você pode querer comparar o desempenho de innerHTML contra document.createElement () ou até mesmo:

el.style.display = 'block' // turn off display: none.

Perfil de seu código pode ser útil como você A B várias refatorações /:

Respondeu 19/05/2009 em 21:41
fonte usuário

votos
1

Eu acredito que o seu problema é a mudança de innerHTMLque muda o DOM que é um problema de desempenho enorme.

Respondeu 19/05/2009 em 21:33
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more