fullscreen.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import utils from './utils';
  2. class FullScreen {
  3. constructor (player) {
  4. this.player = player;
  5. this.player.events.on('webfullscreen', () => {
  6. this.player.resize();
  7. });
  8. this.player.events.on('webfullscreen_cancel', () => {
  9. this.player.resize();
  10. utils.setScrollPosition(this.lastScrollPosition);
  11. });
  12. const fullscreenchange = () => {
  13. this.player.resize();
  14. if (this.isFullScreen('browser')) {
  15. this.player.events.trigger('fullscreen');
  16. }
  17. else {
  18. utils.setScrollPosition(this.lastScrollPosition);
  19. this.player.events.trigger('fullscreen_cancel');
  20. }
  21. };
  22. const docfullscreenchange = () => {
  23. const fullEle = document.fullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
  24. if (fullEle && fullEle !== this.player.container) {
  25. return;
  26. }
  27. this.player.resize();
  28. if (fullEle) {
  29. this.player.events.trigger('fullscreen');
  30. } else {
  31. utils.setScrollPosition(this.lastScrollPosition);
  32. this.player.events.trigger('fullscreen_cancel');
  33. }
  34. };
  35. if (/Firefox/.test(navigator.userAgent)) {
  36. document.addEventListener('mozfullscreenchange', docfullscreenchange);
  37. document.addEventListener('fullscreenchange', docfullscreenchange);
  38. } else {
  39. this.player.container.addEventListener('fullscreenchange', fullscreenchange);
  40. this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);
  41. document.addEventListener('msfullscreenchange', docfullscreenchange);
  42. document.addEventListener('MSFullscreenChange', docfullscreenchange);
  43. }
  44. }
  45. isFullScreen (type = 'browser') {
  46. switch (type) {
  47. case 'browser':
  48. return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
  49. case 'web':
  50. return this.player.container.classList.contains('dplayer-fulled');
  51. }
  52. }
  53. request (type = 'browser') {
  54. const anotherType = type === 'browser' ? 'web' : 'browser';
  55. const anotherTypeOn = this.isFullScreen(anotherType);
  56. if (!anotherTypeOn) {
  57. this.lastScrollPosition = utils.getScrollPosition();
  58. }
  59. switch (type) {
  60. case 'browser':
  61. if (this.player.container.requestFullscreen) {
  62. this.player.container.requestFullscreen();
  63. }
  64. else if (this.player.container.mozRequestFullScreen) {
  65. this.player.container.mozRequestFullScreen();
  66. }
  67. else if (this.player.container.webkitRequestFullscreen) {
  68. this.player.container.webkitRequestFullscreen();
  69. }
  70. else if (this.player.video.webkitEnterFullscreen) { // Safari for iOS
  71. this.player.video.webkitEnterFullscreen();
  72. }
  73. else if (this.player.video.webkitEnterFullScreen) {
  74. this.player.video.webkitEnterFullScreen();
  75. }
  76. else if (this.player.container.msRequestFullscreen) {
  77. this.player.container.msRequestFullscreen();
  78. }
  79. break;
  80. case 'web':
  81. this.player.container.classList.add('dplayer-fulled');
  82. document.body.classList.add('dplayer-web-fullscreen-fix');
  83. this.player.events.trigger('webfullscreen');
  84. break;
  85. }
  86. if (anotherTypeOn) {
  87. this.cancel(anotherType);
  88. }
  89. }
  90. cancel (type = 'browser') {
  91. switch (type) {
  92. case 'browser':
  93. if (document.cancelFullScreen) {
  94. document.cancelFullScreen();
  95. }
  96. else if (document.mozCancelFullScreen) {
  97. document.mozCancelFullScreen();
  98. }
  99. else if (document.webkitCancelFullScreen) {
  100. document.webkitCancelFullScreen();
  101. }
  102. else if (document.webkitCancelFullscreen) {
  103. document.webkitCancelFullscreen();
  104. }
  105. else if (document.msCancelFullScreen) {
  106. document.msCancelFullScreen();
  107. }
  108. else if (document.msExitFullscreen) {
  109. document.msExitFullscreen();
  110. }
  111. break;
  112. case 'web':
  113. this.player.container.classList.remove('dplayer-fulled');
  114. document.body.classList.remove('dplayer-web-fullscreen-fix');
  115. this.player.events.trigger('webfullscreen_cancel');
  116. break;
  117. }
  118. }
  119. toggle (type = 'browser') {
  120. if (this.isFullScreen(type)) {
  121. this.cancel(type);
  122. }
  123. else {
  124. this.request(type);
  125. }
  126. }
  127. }
  128. export default FullScreen;