polyfill.ts 987 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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(
  27. (variant) =>
  28. // @ts-ignore
  29. document.firstChild[variant.request] !== undefined
  30. );
  31. }
  32. request(element: HTMLElement) {
  33. if (this.api !== undefined) {
  34. // @ts-ignore
  35. element[this.api.request]();
  36. }
  37. }
  38. addEventListener(listener: () => void) {
  39. if (this.api !== undefined) {
  40. document.addEventListener(this.api.changeEvent, listener);
  41. }
  42. }
  43. }
  44. export const fullscreen = new FullscreenPolyfill();