fullscreen.js 4.9 KB

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