Tworzę coś, co nazywa się „quizem HTML”. Jest całkowicie uruchomiony w JavaScript i jest całkiem fajny.
Na końcu wyskakuje okienko wyników z napisem „Twoje wyniki:” i pokazuje, ile czasu zajęło im, jaki procent otrzymali i ile pytań otrzymali bezpośrednio na 10. Chciałbym mieć przycisk z napisem „Przechwyć wyniki” i poproś o wykonanie zrzutu ekranu lub czegoś w rodzaju elementu div, a następnie wyświetl przechwycony obraz na stronie, na którym można kliknąć prawym przyciskiem myszy i „Zapisz obraz jako”.
Naprawdę chciałbym to zrobić, aby mogli podzielić się swoimi wynikami z innymi. Nie chcę, aby „kopiowali” wyniki, ponieważ mogą to łatwo zmienić. Jeśli zmienią to, co jest napisane na obrazku, no cóż.
Czy ktoś zna sposób na zrobienie tego lub coś podobnego?
źródło
Odpowiedzi:
Nie, nie znam sposobu na „zrzut ekranu” elementu, ale co możesz zrobić, to narysować wyniki quizu w elemencie canvas, a następnie użyć funkcji
HTMLCanvasElement
obiektu,toDataURL
aby uzyskaćdata:
identyfikator URI z zawartością obrazu.Po zakończeniu quizu wykonaj następujące czynności:
Gdy użytkownik kliknie „Przechwyć”, wykonaj następujące czynności:
Spowoduje to otwarcie nowej karty lub okna ze „zrzutem ekranu”, umożliwiając użytkownikowi jego zapisanie. Nie ma możliwości wywołania okna dialogowego „Zapisz jako”, więc moim zdaniem jest to najlepsze, co możesz zrobić.
źródło
img
że ma swójsrc
zestaw dodata:
URI. Jednak nie jest to naprawdę konieczne - możesz po prostu umieścić tocanvas
samo w wbudowanym oknie dialogowym; użytkownicy mogą kliknąć go prawym przyciskiem myszy i zapisać bieżący stan jako obraz.Jest to rozszerzenie @ Datanowi za odpowiedź , używając html2canvas i FileSaver.js .
Ten blok kodu czeka na kliknięcie przycisku o identyfikatorze
btnSave
. Gdy tak jest, konwertuje elementwidget
div na element kanwy, a następnie używa interfejsu saveAs () FileSaver (za pośrednictwem FileSaver.js w przeglądarkach, które nie obsługują go natywnie), aby zapisać element div jako obraz o nazwie „Dashboard.png”.Przykład takiej pracy jest dostępny pod tym skrzypcem .
źródło
Po godzinach poszukiwań w końcu znalazłem rozwiązanie, aby zrobić zrzut ekranu elementu, nawet jeśli ustawiono
origin-clean
FLAG (aby zapobiec XSS), dlatego możesz nawet przechwycić na przykład Google Maps (w moim przypadku). Napisałem uniwersalną funkcję, aby uzyskać zrzut ekranu. Jedyne, czego potrzebujesz, to biblioteka html2canvas ( https://html2canvas.hertzen.com/ ).Przykład:
Należy pamiętać
console.log()
ialert()
nie generuje danych wyjściowych, jeśli rozmiar obrazu jest duży.Funkcjonować:
źródło
Jeśli chcesz mieć okno dialogowe „Zapisz jako”, po prostu prześlij obrazek do skryptu php, który doda odpowiednie nagłówki
Przykładowy skrypt „wszystko w jednym”
script.php
źródło
Nie możesz zrobić zrzutu ekranu: pozwolenie na to byłoby nieodpowiedzialnym zagrożeniem dla bezpieczeństwa. Możesz jednak:
źródło
Przyjrzyj się pakietowi htmlshot , a następnie dokładnie sprawdź sekcję po stronie klienta :
źródło
cytat
źródło
Jest zbyt proste, możesz użyć tego kodu do przechwycenia zrzutu ekranu określonego obszaru, musisz zdefiniować identyfikator div w html2canvas. Używam tutaj 2 div-:
div id = "samochód"
div id = "chartContainer"
jeśli chcesz przechwytywać tylko samochody, użyj samochodu, który tu przechwytuje, tylko samochód możesz zmienić chartContainer, aby przechwycić wykres html2canvas ($ ( '#car') skopiuj i wklej ten kod
źródło
document.getElementById('car')
lubdocument.querySelector('#car')
O ile wiem, że nie możesz tego zrobić, mogę się mylić. Jednak zrobiłbym to z php, wygenerowałbym JPEG za pomocą standardowych funkcji php, a następnie wyświetlał obraz, nie powinno to być bardzo trudne, jednak zależy to od tego, jak krzykliwa jest zawartość DIV
źródło
O ile wiem, nie jest to możliwe w przypadku javascript.
Co możesz zrobić dla każdego wyniku, stwórz zrzut ekranu, zapisz go gdzieś i wskaż użytkownika po kliknięciu wyniku zapisu. (Myślę, że żaden wynik to tylko 10, więc utworzenie obrazu wyników w formacie 10 jpeg nie jest wielkim problemem)
źródło