Estou construindo algo chamado "HTML Quiz". É completamente executado em JavaScript e é bem legal.
No final, aparece uma caixa de resultados que diz "Seus resultados:" e mostra quanto tempo eles levaram, qual porcentagem eles obtiveram e quantas perguntas eles obtiveram em 10. Gostaria de ter um botão que diz "Capturar resultados" e, de alguma forma, faça uma captura de tela ou algo do div e, em seguida, apenas mostre a imagem capturada na página onde eles podem clicar com o botão direito do mouse e "Salvar imagem como".
Eu realmente adoraria fazer isso para que eles possam compartilhar seus resultados com outras pessoas. Eu não quero que eles "copiem" os resultados porque eles podem facilmente mudar isso. Se eles mudarem o que diz a imagem, tudo bem.
Alguém sabe uma maneira de fazer isso ou algo semelhante?
fonte
Respostas:
Não, eu não sei como fazer uma captura de tela de um elemento, mas o que você pode fazer é desenhar os resultados do questionário em um elemento de tela e usar a função
HTMLCanvasElement
do objetotoDataURL
para obter umdata:
URI com o conteúdo da imagem.Quando o teste terminar, faça o seguinte:
Quando o usuário clicar em "Capturar", faça o seguinte:
Isso abrirá uma nova guia ou janela com a 'captura de tela', permitindo ao usuário salvá-la. Não há como invocar um tipo de diálogo 'salvar como'; portanto, é o melhor que você pode fazer na minha opinião.
fonte
img
que estejasrc
configurada para odata:
URI. No entanto, isso não é realmente necessário - você pode simplesmente colocar ocanvas
próprio na caixa de diálogo embutida; os usuários podem clicar com o botão direito do mouse e salvar o estado atual como uma imagem.Esta é uma expansão da resposta de @ Dathan , usando html2canvas e FileSaver.js .
Esse bloco de código aguarda o
btnSave
clique no botão com o ID . Quando está, converte awidget
div em um elemento de tela e, em seguida, usa a interface saveAs () FileSaver (via FileSaver.js em navegadores que não a suportam nativamente) para salvar a div como uma imagem chamada "Dashboard.png".Um exemplo deste trabalho está disponível neste violino .
fonte
Após horas de pesquisa, finalmente encontrei uma solução para capturar uma captura de tela de um elemento, mesmo que o
origin-clean
FLAG esteja definido (para evitar o XSS), por isso é possível capturar, por exemplo, o Google Maps (no meu caso). Eu escrevi uma função universal para obter uma captura de tela. Além disso, você só precisa da biblioteca html2canvas ( https://html2canvas.hertzen.com/ ).Exemplo:
Lembre-se
console.log()
ealert()
não gerará saída se o tamanho da imagem for ótimo.Função:
fonte
Se você deseja ter a caixa de diálogo "Salvar como", basta passar a imagem para o script php, que adiciona cabeçalhos apropriados
Exemplo de script "all-in-one"
script.php
fonte
Você não pode fazer uma captura de tela: seria um risco de segurança irresponsável permitir que você o faça. No entanto, você pode:
fonte
Dê uma olhada no pacote htmlshot e verifique profundamente a seção do lado do cliente :
fonte
cotação
fonte
É simples: você pode usar esse código para capturar a captura de tela de uma área específica, para definir o ID da div em html2canvas. Estou usando aqui 2 div-:
div id = "carro"
div id = "chartContainer"
se você quiser capturar apenas carros, então use car eu estou capturando aqui carro, apenas você pode alterar o chartContainer para capturar o gráfico html2canvas ($ ( '#car') copie e cole este código
fonte
document.getElementById('car')
oudocument.querySelector('#car')
Tanto quanto sei que você não pode fazer isso, posso estar errado. No entanto, eu faria isso com o php, geraria um JPEG usando as funções padrão do php e depois exibia a imagem, não deve ser um trabalho muito difícil, mas depende de quão chamativo o conteúdo do DIV é
fonte
Tanto quanto eu sei, não é possível com javascript.
O que você pode fazer para cada resultado cria uma captura de tela, salve-a em algum lugar e aponte o usuário quando clicar em Salvar resultado. (Eu acho que nenhum resultado é apenas 10, então não é grande coisa criar 10 jpegs de imagem)
fonte