polyfill.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. interface API {
  2. request: string;
  3. changeEvent: string;
  4. }
  5. const VARIANTS = [
  6. {
  7. request: 'requestFullscreen',
  8. changeEvent: 'fullscreenchange'
  9. },
  10. {
  11. request: 'mozRequestFullScreen',
  12. changeEvent: 'mozfullscreenchange',
  13. },
  14. {
  15. request: 'webkitRequestFullscreen',
  16. changeEvent: 'webkitfullscreenchange',
  17. },
  18. {
  19. request: 'msRequestFullscreen',
  20. changeEvent: 'MSFullscreenChange',
  21. },
  22. ];
  23. class FullscreenPolyfill {
  24. private api: API | undefined;
  25. constructor() {
  26. this.api = VARIANTS.find((variant) =>
  27. // @ts-ignore
  28. document.firstChild[variant.request] !== undefined
  29. );
  30. }
  31. request(element: HTMLElement) {
  32. if (this.api !== undefined) {
  33. // @ts-ignore
  34. element[this.api.request]();
  35. }
  36. }
  37. addEventListener(listener: () => void) {
  38. if (this.api !== undefined) {
  39. document.addEventListener(this.api.changeEvent, listener);
  40. }
  41. }
  42. }
  43. export const fullscreen = new FullscreenPolyfill();