Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

cria um componente deste código

Bom dia, gostaria da ajuda e do direcionamento de vcs prefessores e alunos de como eu posso componentizar meu código a seguir:

  // fileName = nome da IMAGEM e do JSON exportado para gerar a animação
      var fileName = "testeGif";

      // função para executar a leitura do JSON
      function loadJSON(path, success, error) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
          if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
              if (success)
                success(JSON.parse(xhr.responseText));
            } else {
              if (error)
                error(xhr);
            }
          }
        };
        xhr.open("GET", path, true);
        xhr.send();
      } loadJSON(fileName + '.json', // o JSON é informado
        function(data) {
          var animate = document.createElement("div"); // cria a DIV que será criada a animação
          animate.setAttribute("id","animate"); // adiciona um ID a a DIV
          document.body.appendChild(animate); // insere a DIV no HTML
          document.getElementById("animate").style.background = "url(" + fileName + ".png)"; // informa o nome da imagem
          document.getElementById("animate").style.width = data.frames[0].sourceSize.w + "px"; // informa a largura da imagem
          document.getElementById("animate").style.height = data.frames[0].sourceSize.h + "px"; // informa a autura da imagem
          var bgpx, bgpy, bgp;
          for (var i = 0; i < data.frames.length; i++) {
            (function(ind) {
               setTimeout(function(){
                 bgpx = data.frames[ind].frame.x * (-1); // obtem o posicionamento X do frame
                 bgpy = data.frames[ind].frame.y * (-1); // obtem o posicionamento Y do frame
                 bgp = bgpx + "px " + bgpy + "px";
                 document.getElementById("animate").style.backgroundPosition = bgp; // muda o posicionamento da imagem para reproduzir o efeito
               }, 41.6666666667 * i);
            })(i);
          }
        },
        function(xhr) { console.error(xhr); }
      );

agradeço todos que puderem me ajudar a aprender a desenvolver componentes! abraços.

2 respostas

Boa tarde André.

Um dos primeiros pontos para se criar um componente a partir de um código existente é entender esse código. Consegue entender com clareza o que ele faz? Eu não entendi.

Bom, olhando assim, por alto, veja que ele faz uso do XMLHttpRequest, um objeto do JavaScript responsável por realizar requisições Ajax. No caso, você usaria $http em seu lugar.

Dentro desse contexto, você precisa de uma diretiva que busque dados. Você chegou a ver essa parte do curso?

https://cursos.alura.com.br/course/angularjs-mvc/task/9313

Então, depois que você me explicar esse código que você criou, eu posso dar mais orientações em como torná-lo um componente. Mas 90% você já sabe. Que precisará usar $http e criar uma diretiva que tem um controller embutido como no exemplo que lhe passei da aula.

solução!

olá professor, até o momento esse código pega json que contém a estrutura de uma imagem para ser renderizada quadro a quadro gerando uma animação, preciso de um componente que depois eu só passe um novo json de outras imagens para gerar outras animações. eu ainda não vi suas aulas de diretivas, seu direcionamento me ajudou, vou continuar a tentar desenvolver uma solução pro meu problema e volto ao fórum com mais dúvidas quando elas surgirem. muito obrigado pela ajuda!

{"frames": [

{
    "filename": "0106 instância 10000",
    "frame": {"x":0,"y":0,"w":435,"h":291},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":435,"h":291},
    "sourceSize": {"w":435,"h":291}
}
,{
    "filename": "0106 instância 10001",
    "frame": {"x":435,"y":0,"w":435,"h":291},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":435,"h":291},
    "sourceSize": {"w":435,"h":291}
}
,{
    "filename": "0106 instância 10002",
    "frame": {"x":870,"y":0,"w":435,"h":291},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":435,"h":291},
    "sourceSize": {"w":435,"h":291}
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software