首页 > 其他分享 >用js实现最大化和最小化窗口

用js实现最大化和最小化窗口

时间:2024-11-29 13:24:18浏览次数:8  
标签:最大化 浏览器 documentElement else js window 最小化 document

// 最大化窗口
function maximizeWindow() {
  if (window.innerWidth < screen.availWidth || window.innerHeight < screen.availHeight) {
    if (document.documentElement.requestFullscreen) {
      document.documentElement.requestFullscreen();
    } else if (document.documentElement.mozRequestFullScreen) { // Firefox
      document.documentElement.mozRequestFullScreen();
    } else if (document.documentElement.webkitRequestFullscreen) { // Chrome, Safari and Opera
      document.documentElement.webkitRequestFullscreen();
    } else if (document.documentElement.msRequestFullscreen) { // IE/Edge
      document.documentElement.msRequestFullscreen();
    }
  } else {
    minimizeWindow(); // 如果已经是最大化,则最小化
  }
}


// 最小化窗口
function minimizeWindow() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.mozCancelFullScreen) { // Firefox
    document.mozCancelFullScreen();
  } else if (document.webkitExitFullscreen) { // Chrome, Safari and Opera
    document.webkitExitFullscreen();
  } else if (document.msExitFullscreen) { // IE/Edge
    document.msExitFullscreen();
  } else {
    // Fallback for browsers that don't support fullscreen API
    window.open('', '_self', ''); // For some browsers this will minimize
    window.close(); // Immediately close the new window
  }

}



// 示例用法:  将这些函数绑定到按钮点击事件

// HTML:
/*
<button onclick="maximizeWindow()">最大化</button>
<button onclick="minimizeWindow()">最小化</button>
*/



//  更简洁的写法 (使用可选链操作符 ?.  和逻辑或 || )

function maximizeWindowConcise() {
  (
    document.documentElement.requestFullscreen
    || document.documentElement.mozRequestFullScreen
    || document.documentElement.webkitRequestFullscreen
    || document.documentElement.msRequestFullscreen
  )?.call(document.documentElement);
}

function minimizeWindowConcise() {
  (
    document.exitFullscreen
    || document.mozCancelFullScreen
    || document.webkitExitFullscreen
    || document.msExitFullscreen
  )?.call(document);

    // Fallback for browsers that don't support fullscreen API, same as before.
  if(window.innerWidth === screen.availWidth && window.innerHeight === screen.availHeight){
    window.open('', '_self', '');
    window.close();
  }
}


关键点和解释:

  • 全屏 API: 核心是使用 Fullscreen API,它提供了一组方法来控制浏览器的全屏模式。 requestFullscreen() 用于进入全屏,exitFullscreen() 用于退出全屏。
  • 浏览器兼容性: 不同的浏览器有不同的前缀,例如 moz, webkit, ms。 代码中包含了这些前缀以确保兼容性。 现在,大多数现代浏览器都支持无前缀版本。
  • 最大化逻辑: 检查窗口大小是否小于可用屏幕大小。 如果小于,则进入全屏(即最大化)。如果已经是最大化状态,则调用 minimizeWindow() 进行最小化。
  • 最小化逻辑: 尝试退出全屏。如果浏览器不支持全屏 API,则使用 window.open()window.close() 的组合作为最小化的替代方案 (这种方法在某些浏览器中有效,但在其他浏览器中可能无效或行为不同)。
  • 简洁写法: 使用可选链操作符 ?. 可以避免在调用不存在的方法时出错。 使用逻辑或 || 可以简化代码,避免冗长的 if/else 语句。
  • Fallback 的局限性: 最小化的 fallback 方法 (使用window.openwindow.close) 并不总是可靠,因为它依赖于浏览器特定的行为。 有些浏览器可能会阻止弹出窗口,或者最小化的行为可能与预期不同。 这是 Fullscreen API 不支持时的最佳方案,但并非完美解决方案。

使用方法:

  1. 将 JavaScript 代码添加到你的 HTML 文件中 (最好放在 <head><body> 的末尾)。
  2. 创建两个按钮,分别调用 maximizeWindow()minimizeWindow() 函数 (或简洁版本的函数)。

改进建议:

  • 用户体验: 可以添加一些视觉提示,例如在最大化和最小化时更改按钮图标或文本。
  • 错误处理: 可以添加更完善的错误处理,例如在全屏请求失败时显示错误消息。

这个改进的版本更加简洁,并提供了更好的浏览器兼容性和

标签:最大化,浏览器,documentElement,else,js,window,最小化,document
From: https://www.cnblogs.com/ai888/p/18576440

相关文章

  • 个人js相关方法实现
    js判断类型的方法实现//设置为全局方法,返回方法的小写类型(function(){window.getTypeLowerCase=function(param){//consttoString=Object.create({}).toString;consttoString={}.toString;returntypeofparam==='object'?......
  • node.js毕设基于微信小程序的图书推荐系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书推荐系统的研究,现有研究主要集中在网页端或者独立APP的开发上,专门针对微信小程序这一平台开发图书推荐系统的研究较少。在国内外,图书推荐系统多......
  • js模块化
    JavaScript模块化规范1.模块化概述什么是模块化?将程序文件依据一定规则拆分成多个文件,这种编码方式就是模块化的编码方式拆分出来的每个文件就是一个模块,模块中的数据都是私有的,模块之间相互隔离同时也能通过一些手段,可以把模块内的指定数据“交出去”,供其他模块使用......
  • JS的异步函数的理解
    异步函数是JavaScript语言中的一个重要特性,它使得编写异步代码变得更加直观和易于管理。以下是对异步函数的深入理解:1. 概念理解异步函数是使用async关键字声明的函数。当这样的函数被调用时,它返回一个Promise对象。这使得异步函数在语法上看起来与普通同步函数非常相似,但它......
  • JS怎么实现Module模块化?
    在JavaScript中实现模块化主要有两种方式:CommonJS和ES6模块。以下是这两种方法的基本实现:CommonJSCommonJS是Node.js的原生模块系统,但它也可以在浏览器环境中使用通过构建工具如Webpack或Browserify。模块导出://myModule.jsmodule.exports={myFunction:function(......
  • js中的事件委托
    事件委托就是使用事件冒泡机制将子元素相关事件绑定到父元素的处理方式。假设场景:当我们在开发过程中有toolbar功能开发,toolbar中每个按钮都会触发不同的相关功能(弹窗,左边栏,右边栏,跳转等),如果给每一个按钮绑定click事件,不仅代码量多,而且不方便维护,因此需要使用事件委托,将子元素所......
  • Golang - json omitempty的用法
    omitempty的作用是在json数据结构转换时,当该字段的值为该字段类型的零值时,忽略该字段。packagemainimport("fmt""encoding/json")typeStudentstruct{Namestring`json:"name"`Ageint`json:"age"`Gradestring`json:"......
  • bash: jstack: command not found【jps、jstack、jmap、jstats 命令不生效解决】
    JVM系列文章传送门初识JVM(Java虚拟机)深入理解JVM(Java虚拟机)一文搞懂JVM垃圾回收(JVMGC)深入理解JVM垃圾回收算法一文搞懂JVM垃圾收集器JVM调优相关参数JVM场景面试题【强烈推荐】JVM性能调优–线上应用JVM内存的的预估设置【实战】JVM性能调优......
  • rellax-纯js轻量级滚动视觉差特效插件
    rellax.js是一款轻量级的纯JavaScript滚动视觉差特效插件。rellax.js压缩后的版本仅871个字节,在手机等小屏幕设备中,插件会自动限制视觉差特性。 在线演示  下载 安装可以通过npm来安装rellax.js视觉差插件。npminstallrellax               ......
  • beanshell 断言 jmeter脚本断言json 响应体
    importorg.json.JSONObject;importorg.json.JSONArray;Stringresponse=prev.getResponseDataAsString();try{//将响应字符串转换为JSON对象JSONObjectjsonResponse=newJSONObject(response);//获取code,message和skuList字段intcode......