JS html 实现全屏

旧城等待, 2022-06-02 00:42 463阅读 0赞

首先,根据如下警告信息,可以看出,无法自动实现全屏功能,必须要手动才可以.

Failed to execute ‘requestFullscreen’ on ‘Element’: API can only be initiated by a user gesture.

所以要实现全屏你可以通过点击一个 button 控件,或是整个 document 添加一个click 事件,通过点击来手动实现全屏。当然,监听键盘事件也是可以的,实现类似于F11的功能。

我这里的例子是通过监听 document.click 事件来实现整个页面的全屏,需要实现某个页面元素的全屏,可以在网上找找,例子很多。

  1. window.onclick = document.onclick = function (e) {
  2. var el = document.documentElement;
  3. //这里的 el 可以是其他的页面元素,这样实现的就是这个元素的全屏,而不是整个页面的全屏
  4. fullScreen(el);
  5. }
  6. function fullScreen(el) {
  7. var rfs = el.requestFullScreen || el.webkitRequestFullScreen ||
  8. el.mozRequestFullScreen || el.msRequestFullScreen;
  9. if(typeof rfs != "undefined" && rfs) {
  10. rfs.call(el);
  11. } else if(typeof window.ActiveXObject != "undefined") {
  12. //for IE,这里其实就是模拟了按下键盘的F11,使浏览器全屏
  13. var wscript = new ActiveXObject("WScript.Shell");
  14. if(wscript != null) {
  15. wscript.SendKeys("{F11}");
  16. }
  17. }
  18. }

通过如下方式,想要实现自动全屏,但不行,提示必须手动的警告信息:

Failed to execute ‘requestFullscreen’ on ‘Element’: API can only be initiated by a user gesture.

  1. setTimeout(function() {
  2. // IE
  3. if(document.all) {
  4. document.click();
  5. }
  6. // 其它浏览器
  7. else {
  8. var e = document.createEvent("MouseEvents");
  9. e.initEvent("click", true, true);
  10. document.dispatchEvent(e);
  11. }
  12. }, 1000);

判断当前页面是不是全屏的。

  1. /*最好先将页面设置成无滚动(可选)*/
  2. html { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; height: 100%; overflow: hidden; overflow-x: hidden; overflow-y: hidden; }
  3. function checkFull() {
  4. //使用html5中的API判断是否全屏(返回当前全屏的元素)
  5. var FullEl = document.fullscreenElement ||
  6. document.msFullscreenElement ||
  7. document.mozFullScreenElement ||
  8. document.webkitFullscreenElement;
  9. //若是不支持Html5中的API,可以使用以最原始的判断方式,但需要将页面的滚动条去掉
  10. if (FullEl === null) {
  11. return isFullscreenForNoScroll();
  12. }
  13. return true;
  14. }
  15. /** * 支持无滚动条的页面以 Fullscreen api启动的全屏 或是 按f11启动的全屏 * 不支持有滚动条的页面 * @returns {boolean} */
  16. function isFullscreenForNoScroll(){
  17. var explorer = window.navigator.userAgent.toLowerCase();
  18. if(explorer.indexOf('chrome')>0){
  19. //webkit
  20. if (document.body.scrollHeight === window.screen.height && document.body.scrollWidth === window.screen.width) {
  21. console.log("全屏");
  22. return true;
  23. } else {
  24. console.log("不全屏");
  25. return false;
  26. }
  27. }else{
  28. //IE 9+ fireFox
  29. if (window.outerHeight === window.screen.height && window.outerWidth === window.screen.width) {
  30. console.log("全屏");
  31. return true;
  32. } else {
  33. console.log("不全屏");
  34. return false;
  35. }
  36. }
  37. }

在全屏模式下,按 ESC 或是 F11,会执行系统默认的操作,退出全屏,这个是没有方式可以避免的。但我们可以在退出全屏后,实现自己的操作。

  1. function afterExitFull () {
  2. var rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen;
  3. //若是支持html5的API
  4. if (typeof rfs != "undefined" && rfs) {
  5. window.onkeydown = document.onkeydown = function (e) {
  6. var e = event || window.event || arguments.callee.caller.arguments[0];
  7. if(e && e.keyCode == 122){
  8. //捕捉F11键盘动作
  9. e.preventDefault(); //阻止不了F11默认动作
  10. e.stopPropagation();
  11. //监听不同浏览器的全屏事件,并件执行相应的代码
  12. document.addEventListener("webkitfullscreenchange", function(evt) { //
  13. if (document.webkitIsFullScreen) {
  14. //全屏后要执行的代码
  15. }else{
  16. //退出全屏后执行的代码
  17. }
  18. }, false);
  19. document.addEventListener("fullscreenchange", function(evt) {
  20. if (document.fullscreen) {
  21. //全屏后执行的代码
  22. }else{
  23. //退出全屏后要执行的代码
  24. }
  25. }, false);
  26. document.addEventListener("mozfullscreenchange", function(evt) {
  27. if (document.mozFullScreen) {
  28. //全屏后要执行的代码
  29. }else{
  30. //退出全屏后要执行的代码
  31. }
  32. }, false);
  33. document.addEventListener("msfullscreenchange", function(evt) {
  34. if (document.msFullscreenElement) {
  35. //全屏后要执行的代码
  36. }else{
  37. //退出全屏后要执行的代码
  38. }
  39. }, false)
  40. }
  41. }
  42. //否则,使用原始的方法
  43. } else {
  44. window.onresize = function(e) {
  45. if (checkFull()) {
  46. //退出全屏后要执行的代码
  47. } else {
  48. //全屏后要执行的代码
  49. }
  50. };
  51. }
  52. }

发表评论

表情:
评论列表 (有 0 条评论,463人围观)

还没有评论,来说两句吧...

相关阅读