Ir para conteúdo
Thiago Duarte

Drag and Drop para arrastar imagem

Recommended Posts

Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc

 

Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui entender.
É um webapp? você quer arrastar imagens do seu desktop pra dentro do browser?
Ou as imagens estão no mesmo browser, só que em abas diferente?
Ou todas as imagens forram upadas e você quer mover de um ponto para outro na mesma view?
Essas imagens são de formas geométricas? São blocos tipo tetris?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria imagem de bloco html dentro de um dashboard e arrastar pro lado

 

Consegui algo parecido pesquisando mas ta o conteudo dentro do mesmo codigo e queria que ele tivesse fora e sendo incluindo como conteudo-1.html , conteudo-2.html 

 

Ta ai o codigo pra você entender melhor https://pastebin.com/efaTtWMK

 

Nao deve ter isso 

  1. "if (type === "menu") {
  2.     content = "<nav class='navbar navbar-expand-lg navbar-light bg-light'>" +
  3.                 "<a class='navbar-brand' href='#'>Navbar</a>" +
  4.                 "<button class='navbar-toggler' type='button' data-toggle='collapse' data-target='#navbarSupportedContent' aria-controls='navbarSupportedContent' aria-expanded='false' aria-label='Toggle navigation'>" +
  5.                   "<span class='navbar-toggler-icon'></span>" +...."
deve ser algo assim mais ou menos if (type === "menu") { incluir "conteudo-1.html
 
entendeu o que preciso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

criando um método que implement o fetch e alterando pra async/await você consegue o que quer, mas manipulando arquivo você só conseguira executar o html dentro de um servidor não vai conseguir abrindo o html direto no browser.
 

async function loadHtmlFile(pathFile) {
    try {
        const response = await fetch(pathFile);
        const html = await response.text();
        return html;
    } catch (error) {
        console.error('Error on load file:', error);
        return null;
    }
}

ai você chamaria dessa forma e adicionando o async para que consiga lidar com a promise com await, nesse exemplo criei uma pasta "template" on de vai conter todos os arquivos html abstraidos desse metodo:

async function drop(event) {
    event.preventDefault();
    var type = event.dataTransfer.getData("text");
    var content = "";

    if (type === "menu") {
        content = await loadHtmlFile('./template/menu.html');
    } else if (type === "header") {
        content = await loadHtmlFile('./template/header.html');
    } else if (type === "content") {
        content = await loadHtmlFile('./template/content.html');
    } else if (type === "footer") {
        content = await loadHtmlFile('./template/footer.html');
    }

Uma sugestão de melhoria de codigo, em casos masi simples:

async function drop(event) {
    event.preventDefault();
    var type = event.dataTransfer.getData("text");
    var content = "";

    /*if (type === "menu") {
        content = await loadHtmlFile('./template/menu.html');
    } else if (type === "header") {
        content = await loadHtmlFile('./template/header.html');
    } else if (type === "content") {
        content = await loadHtmlFile('./template/content.html');
    } else if (type === "footer") {
        content = await loadHtmlFile('./template/footer.html');
    }*/

    template = {
        "menu": './template/menu.html',
        "header": './template/header.html',
        "content": './template/content.html',
        "footer": './template/footer.html'
    }

    content = await loadHtmlFile(template[type]);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, wanderval disse:

criando um método que implement o fetch e alterando pra async/await você consegue o que quer, mas manipulando arquivo você só conseguira executar o html dentro de um servidor não vai conseguir abrindo o html direto no browser.
 


async function loadHtmlFile(pathFile) {
    try {
        const response = await fetch(pathFile);
        const html = await response.text();
        return html;
    } catch (error) {
        console.error('Error on load file:', error);
        return null;
    }
}

ai você chamaria dessa forma e adicionando o async para que consiga lidar com a promise com await, nesse exemplo criei uma pasta "template" on de vai conter todos os arquivos html abstraidos desse metodo:


async function drop(event) {
    event.preventDefault();
    var type = event.dataTransfer.getData("text");
    var content = "";

    if (type === "menu") {
        content = await loadHtmlFile('./template/menu.html');
    } else if (type === "header") {
        content = await loadHtmlFile('./template/header.html');
    } else if (type === "content") {
        content = await loadHtmlFile('./template/content.html');
    } else if (type === "footer") {
        content = await loadHtmlFile('./template/footer.html');
    }

Uma sugestão de melhoria de codigo, em casos masi simples:


async function drop(event) {
    event.preventDefault();
    var type = event.dataTransfer.getData("text");
    var content = "";

    /*if (type === "menu") {
        content = await loadHtmlFile('./template/menu.html');
    } else if (type === "header") {
        content = await loadHtmlFile('./template/header.html');
    } else if (type === "content") {
        content = await loadHtmlFile('./template/content.html');
    } else if (type === "footer") {
        content = await loadHtmlFile('./template/footer.html');
    }*/

    template = {
        "menu": './template/menu.html',
        "header": './template/header.html',
        "content": './template/content.html',
        "footer": './template/footer.html'
    }

    content = await loadHtmlFile(template[type]);

 

 

Fiz isso e não apareceu nada quando soltei, vou postar o link do codigo  https://pastebin.com/hbkJn1jg

deveria funcionar no xampp né?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas pelo que vi do seu código está faltando o metodo que citei:
 

async function loadHtmlFile(pathFile) {
    try {
        const response = await fetch(pathFile);
        const html = await response.text();
        return html;
    } catch (error) {
        console.error('Error on load file:', error);
        return null;
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, wanderval disse:

mas pelo que vi do seu código está faltando o metodo que citei:
 


async function loadHtmlFile(pathFile) {
    try {
        const response = await fetch(pathFile);
        const html = await response.text();
        return html;
    } catch (error) {
        console.error('Error on load file:', error);
        return null;
    }
}

 

 

 

Coloquei e nada funcionou, ve meu codigo: https://pastebin.com/LRFdb6HS

 

..

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu postei inicialmente os metodo que deveria ser adicionado e o que deveria ser modificado mas o restante dos metodos permanecem, vi que você removeu alguns metodos.

 

1-so fiz alterações não substitui todo o script
2-tem que rodar o projeto em um servidor local senão terá problema de cors
 

function allowDrop(event) {
    event.preventDefault();
}

function drag(event, type) {
    event.dataTransfer.setData("text", type);
}

async function loadHtmlFile(pathFile) {
    try {
        const response = await fetch(pathFile);
        const html = await response.text();
        return html;
    } catch (error) {
        console.error('Error on load file:', error);
        return null;
    }
}

async function drop(event) {
    event.preventDefault();
    var type = event.dataTransfer.getData("text");
    var content = "";

    template = {
        "menu": './template/menu.html',
        "header": './template/header.html',
        "content": './template/content.html',
        "footer": './template/footer.html'
    }

    content = await loadHtmlFile(template[type]);

    var dropzone = event.target.closest('.content');
    if (dropzone) {
        var block = document.createElement("div");
        block.className = "alert alert-primary position-relative";
        block.innerHTML = content;

        var deleteButton = document.createElement("i");
        deleteButton.className = "fa fa-trash delete-button";
        deleteButton.onclick = function() {
            if (confirm("Tem certeza que deseja deletar este bloco?")) {
                block.remove();
            }
        };

        var redButton = document.createElement("button");
        redButton.className = "red-button";
        redButton.innerHTML = "Deletar";
        redButton.onclick = function() {
            if (confirm("Tem certeza que deseja deletar este bloco?")) {
                block.remove();
            }
        };

        var duplicateButton = document.createElement("button");
        duplicateButton.className = "duplicate-button";
        duplicateButton.innerHTML = "Duplicar";
        duplicateButton.onclick = function() {
            duplicateBlock(block);
        };

        block.appendChild(deleteButton);
        block.appendChild(redButton);
        block.appendChild(duplicateButton);

        dropzone.appendChild(block);

        tinymce.init({
            selector: '.editable',
            height: 200,
            menubar: false,
            plugins: [
                'advlist autolink lists link image charmap print preview anchor',
                'searchreplace visualblocks code fullscreen',
                'insertdatetime media table paste code help wordcount'
            ],
            toolbar: 'undo redo | formatselect | bold italic backcolor | \
                        alignleft aligncenter alignright alignjustify | \
                        bullist numlist outdent indent | removeformat | help'
        });
    }
}

function duplicateBlock(originalBlock) {
    var newBlock = originalBlock.cloneNode(true);
    var deleteButton = newBlock.querySelector('.delete-button');
    deleteButton.onclick = function() {
        if (confirm("Tem certeza que deseja deletar este bloco?")) {
            newBlock.remove();
        }
    };
    var redButton = newBlock.querySelector('.red-button');
    redButton.onclick = function() {
        if (confirm("Tem certeza que deseja deletar este bloco?")) {
            newBlock.remove();
        }
    };
    document.querySelector('.content').appendChild(newBlock);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi amigo, deu certo mas quando fui implantar isso no meu sistema de vdd deu problema.

 

te passo um pix pra ajudar a implantar isso no meu dashboard, ok?

 

meu email: thiagoduarte1 (arroba) gmail.com , substitui essa msg de arroba por um de vdd e me manda um email, blz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma pequena dúvida, referente a PEGAR AUTOMATICAMENTE a HORA e alimentar o campo INPUT.
       
      Tenho uma rotina, que estava aparentemente funcionando corretamente, mas agora estou tendo problema.
       
      A rotina, pega a HORA atual e informa automaticamente o INPUT, não estou entendendo porque agora não está mais fazendo.

      Abaixo a rotina.

       
      <div class="col-lg-3"> <label for="cotaHrsinicio">Hora da Abertura<span class="required">*</span></label> <div class="controls"> <input type="time" id="cotaHrsinicio" name="cotaHrsinicio" class="form-control" style="width:100%;" value="" /> <!-- NESSE INPUT A ROTINA INFORMA A DATA ATUAL --> </div> </div>  
       
      function date_time() { var date = new Date(); //var am_pm = "AM"; var hour = date.getHours(); /* if(hour>=12){ am_pm = "PM"; } */ if (hour == 0) { hour = 12; } if(hour<12){ hour = hour - 12; } if(hour>12){ hour + 12; } if(hour<10){ hour = "0"+hour; } var minute = date.getMinutes(); if (minute<10){ minute = "0"+minute; } var sec = date.getSeconds(); if(sec<10){ sec = "0"+sec; } /* *Formato da Hora (h:m:s) * Passar para a Variável: Hora Atual */ var cotaHrsinicio = document.getElementById("cotaHrsinicio").value = hour+":"+minute; }
      Grato,
       
      Cesar

       
    • Por luiz monteiro
      Bom dia.
      Estou precisando formatar um campo de entrada type text somente para numero com a seguinte formatação.
      se menor que 999 mostrar dessa forma mesmo, nesse caso seria para centena.dezena.unidade. Tipo 001 até 009 depois 010 até 099 depois 100 até 999
      de 1.000 até 999.999  mostrar com o ponto, nesse caso seria para milhar.centena.dezena.unidade. Tipo 001.000 até 001.999 e assim por diante.
      de 1.000.000 até 9.999.000, nesse caso seria para milhão.milhar.centena.dezena.unidade. aqui mesma ideia....
      Parecidos com aqueles campos de preço, que ao digitar os zeros ficam a esquerda até o valor atingirem a unidade correspondente.
       
      Tentei adaptar esse que encontrei na net.
      function moeda(a, e, r, t) { let n = "" , h = j = 0 , u = tamanho2 = 0 , l = ajd2 = "" , o = window.Event ? t.which : t.keyCode; if (13 == o || 8 == o) return !0; if (n = String.fromCharCode(o), -1 == "0123456789".indexOf(n)) return !1; for (u = a.value.length, h = 0; h < u && ("0" == a.value.charAt(h) || a.value.charAt(h) == r); h++) ; for (l = ""; h < u; h++) -1 != "0123456789".indexOf(a.value.charAt(h)) && (l += a.value.charAt(h)); if (l += n, 0 == (u = l.length) && (a.value = ""), 1 == u && (a.value = "0" + r + "0" + l), 2 == u && (a.value = "0" + r + l), u > 2) { for (ajd2 = "", j = 0, h = u - 3; h >= 0; h--) 3 == j && (ajd2 += e, j = 0), ajd2 += l.charAt(h), j++; for (a.value = "", tamanho2 = ajd2.length, h = tamanho2 - 1; h >= 0; h--) a.value += ajd2.charAt(h); a.value += r + l.substr(u - 2, u) } return !1 } Mas sem sucesso.
       
      Grato por enquanto.
       
       
       
    • Por Giovanird
      O script abaixo atualiza a página (centro.php) a cada um minuto e dentro desta página terei uma div que não poderá ser atualizada.
      Tentei colocar esta div como pagina com setInterval de 100 minutos porem ao dar o refresh no centro.php  tudo vai junto.  Será que isto é possivel?

      Desde já meu muito obrigado!
      <script> function atualiza(){ var url = 'centro.php'; $.get(url, function(dataReturn) { $('#centro').html(dataReturn); }); } setInterval("atualiza()",60000); </script>  

    • Por luiz monteiro
      Bom dia. Eu estou tentando encontrar uma maneira de evitar que após o usuário selecionar, se selecionar, uma imagem, essa seja substituída apenas por outra selecionada. Porém quando o usuário cancela a seleção, o input file remove o arquivo se já foi selecionado anteriormente.
      Essa é a estrutura que estou usando HTML
      form action="#" method="post" name="formulario" id="formulario" enctype="multipart/form-data"
      input type="file" name="file_name[]" br input type="file" name="file_name[]" br button enviar /button /form
      JS PURO
      Peguei esse script em um post aqui do stackoverflow e adaptei
      script type="text/javascript"
      let formulario = document.querySelector("#formulario"); formulario.addEventListener("change", (e)=>{ e.preventDefault(); var file = e.target.files[0]; if (e.target.files.length === 1 && e.target.files !== undefined && e.target.files !== null && file.type.match('image.*')) { console.log("if okay"); } else { //preciso entender o que devo fazer aqui para verificar se há arquivo no DOM desse target caso, o usuário cancele a seleção, para evitar que se há um arquivo no DOM esse permaneça. console.log(file); //CASO O USUÁRIO CANSELA A SELEÇÃO, RETORNA undefined } }); /script
      O if está correto, porém o que falta é o que fazer no else. Agradeço desde já.
    • Por ILR master
      Fala pessoal, tudo bem?
       
      Tô tentando fazer um pre-loading, mas não consigo de jeito algum.
      Quero mostrar uma animação enquanto a página é carregada e depois de caregada, esconder a animação e mostrar conteúdo.
       
      Aguém pode me ajudar?
       
      Segue código abaixo
       
       
      <!DOCTYPE html>
      <html lang="pt-br">
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />  
          <title>PÁGINA LOAD</title>

      <style type="text/css">
      .loadclass {
          border: 2px solid #f3f3f3; /* Light grey */
          border-top: 4px solid #ffc401; /* Blue */
          border-radius: 50%;
          width: 50px;
          height: 50px;
          animation: spin 2s linear infinite;
      }
      @keyframes spin {
          0% { transform: rotate(0deg); }
          100% { transform: rotate(360deg); }
      }
      .conteudo {
          display:none;
      }
      </style>
      <script>
          function loading(){
              document.getElementsByClassName('loadclass')[0].style.display="none";
              document.getElementsByClassName('conteudo').style.display="block";
          }
      </script>
      </head>
      <body onLoad="loading()">
      <div class="loadclass"></div>
      <div class="conteudo">SEU CONTEUDO AQUI DENTRO!!!</div>
      </body>
      </html>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.