Je suis en train de créer quelque chose appelé "HTML Quiz". Il est complètement exécuté sur JavaScript et c'est plutôt cool.
À la fin, une boîte de résultats apparaît qui dit "Vos résultats:" et elle montre combien de temps ils ont pris, quel pourcentage ils ont obtenu et combien de questions ils ont obtenu directement sur 10. J'aimerais avoir un bouton qui dit "Capturez les résultats" et faites-le en quelque sorte prendre une capture d'écran ou quelque chose du div, puis montrez simplement l'image capturée sur la page où ils peuvent faire un clic droit et "Enregistrer l'image sous".
J'adorerais vraiment faire cela pour qu'ils puissent partager leurs résultats avec les autres. Je ne veux pas qu'ils «copient» les résultats parce qu'ils peuvent facilement changer cela. S'ils changent ce qu'il dit dans l'image, eh bien.
Quelqu'un connaît-il un moyen de faire cela ou quelque chose de similaire?
la source
Réponses:
Non, je ne connais pas un moyen de `` capturer '' un élément, mais ce que vous pourriez faire, c'est dessiner les résultats du quiz dans un élément de canevas, puis utiliser la fonction de l'
HTMLCanvasElement
objettoDataURL
pour obtenir undata:
URI avec le contenu de l'image.Lorsque le quiz est terminé, procédez comme suit:
Lorsque l'utilisateur clique sur "Capturer", procédez comme suit:
Cela ouvrira un nouvel onglet ou une nouvelle fenêtre avec la «capture d'écran», permettant à l'utilisateur de l'enregistrer. Il n'y a aucun moyen d'invoquer une sorte de dialogue «enregistrer sous», c'est donc le mieux que vous puissiez faire à mon avis.
la source
img
qui a sonsrc
ensemble à l'data:
URI. Cependant, ce n'est pas vraiment nécessaire - vous pouvez simplement mettre lecanvas
lui - même dans la boîte de dialogue en ligne; les utilisateurs peuvent cliquer dessus avec le bouton droit de la souris et enregistrer l'état actuel sous forme d'image.Il s'agit d'une extension de la réponse de @ Dathan , utilisant html2canvas et FileSaver.js .
Ce bloc de code attend que le bouton avec l'identifiant
btnSave
soit cliqué. Quand c'est le cas, il convertit lewidget
div en élément de canevas puis utilise l'interface SaveAs () FileSaver (via FileSaver.js dans les navigateurs qui ne le prennent pas en charge nativement) pour enregistrer le div sous une image nommée "Dashboard.png".Un exemple de ce fonctionnement est disponible sur ce violon .
la source
Après des heures de recherche, j'ai finalement trouvé une solution pour prendre une capture d'écran d'un élément, même si le
origin-clean
FLAG est défini (pour éviter XSS), c'est pourquoi vous pouvez même capturer par exemple Google Maps (dans mon cas). J'ai écrit une fonction universelle pour obtenir une capture d'écran. La seule chose dont vous avez besoin en plus est la bibliothèque html2canvas ( https://html2canvas.hertzen.com/ ).Exemple:
Gardez à l'esprit
console.log()
etalert()
ne générera pas de sortie si la taille de l'image est grande.Fonction:
la source
Si vous souhaitez avoir la boîte de dialogue "Enregistrer sous", passez simplement l'image dans le script php, qui ajoute les en-têtes appropriés
Exemple de script "tout-en-un"
script.php
la source
Vous ne pouvez pas prendre de capture d'écran: ce serait un risque de sécurité irresponsable de vous laisser faire. Cependant, vous pouvez:
la source
Jetez un œil au package htmlshot , puis vérifiez en profondeur la section côté client :
la source
devis
la source
C'est simple, vous pouvez utiliser ce code pour capturer la capture d'écran d'une zone particulière que vous devez définir l'id div dans html2canvas. J'utilise ici 2 div-:
div id = "car"
div id = "chartContainer"
si vous voulez capturer uniquement des voitures puis utilisez la voiture Je capture ici la voiture seulement vous pouvez changer chartContainer pour capturer le graphique html2canvas ($ ( '#car') copiez et collez ce code
la source
document.getElementById('car')
oudocument.querySelector('#car')
Autant que je sache que vous ne pouvez pas faire ça, je me trompe peut-être. Cependant, je ferais cela avec php, générer un JPEG en utilisant les fonctions standard de php, puis afficher l'image, ne devrait pas être un travail très difficile, mais dépend de la façon dont le contenu du DIV est flashy
la source
Autant que je sache, ce n'est pas possible avec javascript.
Ce que vous pouvez faire pour chaque résultat, créez une capture d'écran, enregistrez-la quelque part et pointez l'utilisateur lorsque vous cliquez sur Enregistrer le résultat. (Je suppose que le résultat n'est que de 10, donc ce n'est pas un gros problème de créer 10 images jpeg de résultats)
la source