Estoy construyendo algo llamado "HTML Quiz". Se ejecuta completamente en JavaScript y es bastante bueno.
Al final, aparece un cuadro de resultados que dice "Tus resultados:" y muestra cuánto tiempo tomaron, qué porcentaje obtuvieron y cuántas preguntas obtuvieron de 10. Me gustaría tener un botón que diga "Capture resultados" y haga que de alguna manera tome una captura de pantalla o algo del div, y luego simplemente muestre la imagen capturada en la página donde pueden hacer clic derecho y "Guardar imagen como".
Realmente me encantaría hacer esto para que puedan compartir sus resultados con otros. No quiero que "copien" los resultados porque pueden cambiar eso fácilmente. Si cambian lo que dice en la imagen, bueno.
¿Alguien sabe una manera de hacer esto o algo similar?
fuente
Respuestas:
No, no conozco una forma de 'capturar' un elemento, pero lo que podría hacer es dibujar los resultados de la prueba en un elemento de lienzo, luego usar la función
HTMLCanvasElement
del objetotoDataURL
para obtener undata:
URI con el contenido de la imagen.Cuando finalice el cuestionario, haga esto:
Cuando el usuario haga clic en "Capturar", haga esto:
Esto abrirá una nueva pestaña o ventana con la 'captura de pantalla', permitiendo al usuario guardarla. No hay forma de invocar un tipo de diálogo 'guardar como', por lo que es lo mejor que puedes hacer en mi opinión.
fuente
img
que tengasrc
configurado eldata:
URI. Sin embargo, eso no es realmente necesario: simplemente puede colocarlocanvas
en el cuadro de diálogo en línea; los usuarios pueden hacer clic con el botón derecho y guardar el estado actual como una imagen.Esta es una expansión de la respuesta de @ Dathan , usando html2canvas y FileSaver.js .
Este bloque de código espera
btnSave
a que se haga clic en el botón con la identificación . Cuando es así, convierte elwidget
div en un elemento de lienzo y luego usa la interfaz saveAs () FileSaver (a través de FileSaver.js en navegadores que no lo admiten de forma nativa) para guardar el div como una imagen llamada "Dashboard.png".Un ejemplo de este trabajo está disponible en este violín .
fuente
Después de horas de investigación, finalmente encontré una solución para tomar una captura de pantalla de un elemento, incluso si la
origin-clean
FLAG está configurada (para evitar XSS), es por eso que incluso puede capturar, por ejemplo, Google Maps (en mi caso). Escribí una función universal para obtener una captura de pantalla. Además, lo único que necesita es la biblioteca html2canvas ( https://html2canvas.hertzen.com/ ).Ejemplo:
Tenga en cuenta
console.log()
yalert()
no generará resultados si el tamaño de la imagen es excelente.Función:
fuente
Si desea tener el cuadro de diálogo "Guardar como", simplemente pase la imagen al script php, que agrega los encabezados apropiados
Ejemplo de script "todo en uno"
script.php
fuente
No puede tomar una captura de pantalla: sería un riesgo de seguridad irresponsable permitirle hacerlo. Sin embargo, puedes:
fuente
Eche un vistazo al paquete htmlshot , luego, revise profundamente la sección del lado del cliente :
fuente
cotización
fuente
Es simple que pueda usar este código para capturar la captura de pantalla de un área particular que tiene que definir la identificación div en html2canvas. Estoy usando aquí 2 div-:
div id = "car"
div id = "chartContainer"
si quieres capturar solo autos, entonces usa car i'm capture here car solo puedes cambiar chartContainer para capturar el gráfico html2canvas ($ ( '#car') copia y pega este código
fuente
document.getElementById('car')
odocument.querySelector('#car')
Por lo que sé, no puedes hacer eso, puedo estar equivocado. Sin embargo, haría esto con php, generaría un JPEG usando las funciones estándar de php y luego mostraría la imagen, no debería ser un trabajo muy difícil, sin embargo, depende de cuán llamativos sean los contenidos del DIV
fuente
Hasta donde yo sé, no es posible con JavaScript.
Lo que puede hacer por cada resultado es crear una captura de pantalla, guardarla en algún lugar y señalar al usuario cuando se hace clic en Guardar resultado. (Supongo que ninguno de los resultados es solo 10, por lo que no es un gran problema para crear una imagen de resultados de 10 jpeg)
fuente