构建全屏 Web 应用程序

简介: 全屏 UI 设计有助于通过消除干扰来保持用户与内容的专注互动。因此,可以看到在现代 Web 应用程序中越来越多地使用全屏 UI,这都得益于浏览器的发展。在过去Web 应用要支持丝滑全屏还是有一定的复杂度,如借助 Flash 等等。在本文中,通过一个简单的全屏功能来展示 JavaScript 全屏 API 功能的使用。

全屏 UI 设计有助于通过消除干扰来保持用户与内容的专注互动。因此,可以看到在现代 Web 应用程序中越来越多地使用全屏 UI,这都得益于浏览器的发展。在过去Web 应用要支持丝滑全屏还是有一定的复杂度,如借助 Flash 等等。在本文中,通过一个简单的全屏功能来展示 JavaScript 全屏 API 功能的使用。

什么是全屏 API?

全屏 API 提供了将全屏集成到 DOM 元素及其子元素的方法,开发人员可以使用此功能向最终用户轻松的实现全屏。

如日常生活中腾讯视频、优酷视频等视频网站、地图或WEB游戏等等,全屏模式可提供更好的用户体验。

注意:浏览器对全屏 API 的支持因 Safari 不完全支持此功能而异。但是可以通过使用判断浏览器来兼容解决这个问题。

全屏 API 示例

使用全屏 API 非常简单,它有一系列现成的全局方法。下面就以创建一个简单应用程序来演示全屏 API 的功能。可以在这里 multifile-uploader项目中找到完整的代码。

requestFullscreen

全屏 API 提供了一个名为 requestFullscreen() 的方法来从浏览器请求全屏视图,将返回一个 promise ,该 promise 将在激活全屏模式后完成。

增加全屏按钮,并绑定一个 click 事件。

let elemBtnFullscreen = document.querySelector(".fullscreen-button");
elemBtnFullscreen.addEventListener("click", () => {
    document.documentElement.requestFullscreen();
});

也能为页面上某一个元素使用 requestFullscreen() 函数,如对按钮使用全屏,如下:

const elemBtnFullscreen2 = document.querySelector(".fullscreen-upload-button");
elemBtnFullscreen2.addEventListener("click", () => {
    document.querySelector(".upload-btn").requestFullscreen();
});

退出全屏

退出全屏很简单,因为用户可以使用 Esc 键或任何其它常规方法。但是,如果想使用自定义按钮来实现它,则可以使用 exitFullscreen() 方法。这是一种文档范围的方法,它将当前元素从全屏模式切换回窗口模式。

const elemBtnExitscreen = document.querySelector(".exit-button");
elemBtnExitscreen.addEventListener("click", () => {
    document.exitFullscreen();
});

全屏切换

有时,与使用多个按钮相比,可能更喜欢使用单个切换按钮来启用和禁用全屏模式。但是,全屏 API 没有提供任何直接的方法来在窗口视图和全屏视图之间切换。

但是,可以使用现有的方法和属性轻松实现全屏切换功能。

在这个例子中,将使用以下属性来检查浏览器是否支持全屏视图或者应用程序是否已经处于全屏模式。

  • document.fullscreenEnabled :检查浏览器是否支持全屏并被用户允许。
  • document.fullscreenElement :将返回全屏视图中的当前元素, 如果我们不在全屏模式下返回 null

toggleFullscreen() 函数的代码如下:

const toggleFullscreen = () => {
    if (document.fullscreenEnabled) {
        if (document.fullscreenElement) {
            document.exitFullscreen();
        } else {
            document.documentElement.requestFullscreen();
        }
    } else {
        alert("Fullscreen is not supported!");
    }
};
const elemBtnFullscreen = document.querySelector(".fullscreen-button");
elemBtnFullscreen.addEventListener("click", () => {
    toggleFullscreen();
});
document.addEventListener("keydown", (e) => {
    if (e.key === "Enter") {
        toggleFullscreen();
    }
});

全屏样式

可以使用 CSS 伪类为全屏元素添加特定 :fullscreen 样式,然后,当用户请求全屏视图时,样式将应用于 UI,更详细的介绍可以参阅《WEB 全屏 API 简介及示例

结论

渲染媒体元素时通常使用全屏视图,但是继续前进,接下来,可以使用全屏 API 将任何元素带入全屏视图体验。

全屏 API 提供了一大堆可以使用的特性,但是,在实际Web 应用中需要考虑浏览器的兼容性。如果不想自己处理兼容性问题,可以使用第三方脚本库(如 react-fullscreenscreenfull.jsfscreen)轻松实现更好的全屏体验。


相关文章
|
3天前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
20天前
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
27 6
|
22天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要
24 2
|
26天前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
27天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
1月前
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
28天前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
29天前
|
缓存 安全 前端开发
构建高效Web应用的五大关键技术
【10月更文挑战第42天】在数字化浪潮中,Web应用已成为企业与用户互动的重要桥梁。本文将深入探讨提升Web应用性能和用户体验的五项核心技术,包括前端优化、后端架构设计、数据库管理、安全性增强以及API开发的最佳实践。通过这些技术的应用,开发者可以构建出更快、更稳定且更安全的Web应用,满足现代网络环境的需求。
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
158 3
下一篇
DataWorks