我们能够轻松打造沉浸式全屏网站 但与网络上的任何应用一样,您有多种方法可以实现这一目的。 如今越来越多的浏览器支持“安装 Web 应用”启动全屏
让应用或网站进入全屏模式
用户或开发者可以通过多种方式让 Web 应用进入全屏模式。
- 为响应用户手势,请求浏览器进入全屏模式。
- 将应用安装到主屏幕。
- 弄虚作假:自动隐藏地址栏。
请求浏览器进入全屏模式以响应用户手势
平台不同。 iOS Safari 没有全屏 API,Android 上的 Chrome 则有全屏 API, Firefox 和 IE 11+。您构建的大多数应用都会使用 JS API 和全屏规范提供的 CSS 选择器。主要 JS API 如下:
element.requestFullscreen()
(目前在 Chrome、Firefox 和 IE 中添加前缀) 在全屏模式下显示元素。document.exitFullscreen()
(目前在 Chrome、Firefox 和 IE 中添加前缀。 Firefox 改用cancelFullScreen()
)取消全屏模式。document.fullscreenElement
(目前在 Chrome、Firefox 和 IE 中添加前缀) 如果有任何元素处于全屏模式,则返回 true。
当您的应用全屏显示时,您将不再拥有浏览器的界面控件 可用的资源这将改变用户与 体验它们没有“前进”等标准导航控件 和向后他们却没有“刷新”按钮这一应急方法。时间是 来满足这种情况您可以借助一些 CSS 选择器 在浏览器进入时更改网站的样式和外观 全屏模式。
<button id="goFS">Go fullscreen</button>
<script>
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
document.body.requestFullscreen();
},
false,
);
</script>
上面的示例有点人为制造:我把所有复杂的因素都隐藏在 供应商前缀的使用
实际代码要复杂得多。Mozilla 已经创建了一个非常实用的脚本,您可以用它开启/关闭全屏模式。如 供应商前缀的情况很复杂 会更麻烦即使代码略微简化, 但它仍然很复杂。
function toggleFullScreen() {
var doc = window.document;
var docEl = doc.documentElement;
var requestFullScreen =
docEl.requestFullscreen ||
docEl.mozRequestFullScreen ||
docEl.webkitRequestFullScreen ||
docEl.msRequestFullscreen;
var cancelFullScreen =
doc.exitFullscreen ||
doc.mozCancelFullScreen ||
doc.webkitExitFullscreen ||
doc.msExitFullscreen;
if (
!doc.fullscreenElement &&
!doc.mozFullScreenElement &&
!doc.webkitFullscreenElement &&
!doc.msFullscreenElement
) {
requestFullScreen.call(docEl);
} else {
cancelFullScreen.call(doc);
}
}
我们网络开发者讨厌复杂性。一个实用的高级抽象 API 是 Sindre Sorhus 的 Screenfull.js 模块 它将两个略有不同的 JS API 和供应商前缀合并为一个 一致的 API。
全屏 API 提示
全屏显示文档
<ph type="x-smartling-placeholder">您很自然地认为会让 body 元素进入全屏模式, 在基于 WebKit 或 Blink 的渲染引擎中,您会发现 将正文宽度缩减到尽可能小的尺寸,包含所有 内容。(Mozilla Gecko 没有问题。)
<ph type="x-smartling-placeholder">要解决此问题,请使用文档元素,而不是正文元素:
document.documentElement.requestFullscreen();
使视频元素全屏显示
让视频元素全屏显示的方法与让其他任何元素
元素全屏显示。您对视频调用 requestFullscreen
方法
元素。
<video id="videoElement"></video>
<button id="goFS">Go Fullscreen</button>
<script>
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
var videoElement = document.getElementById('videoElement');
videoElement.requestFullscreen();
},
false,
);
</script>
如果您的 <video>
元素未定义控件属性,
一旦用户进入全屏模式,便无法再控制视频。通过
推荐方法是使用一个用于封装视频的基本容器
您希望用户看到的控件
<div id="container">
<video></video>
<div>
<button>Play</button>
<button>Stop</button>
<button id="goFS">Go fullscreen</button>
</div>
</div>
<script>
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
var container = document.getElementById('container');
container.requestFullscreen();
},
false,
);
</script>
这种做法的灵活性更高 对象与 CSS 伪选择器相关联(例如,隐藏“goFS”按钮)。
<style>
#goFS:-webkit-full-screen #goFS {
display: none;
}
#goFS:-moz-full-screen #goFS {
display: none;
}
#goFS:-ms-fullscreen #goFS {
display: none;
}
#goFS:fullscreen #goFS {
display: none;
}
</style>
通过使用这些模式,您可以检测全屏模式是否运行,并据以调整 界面,例如:
- 提供返回初始页的链接
- 提供一种关闭对话框或回退的机制
从主屏幕以全屏模式启动网页
您无法在用户导航至该网页时启动全屏网页。 浏览器供应商非常清楚,每次网页加载时都有全屏体验 是个巨大的麻烦,因此需要用户手势才能进入全屏模式。 供应商允许用户“安装”而安装这一操作 它向操作系统发出信号,表明用户希望在 平台。
在各大移动平台上,使用以下任一方法很容易实现 元标记或清单文件。
iOS
自从 iPhone 发布以来,用户就能够安装 Web 应用 主屏幕,并让它们作为全屏 Web 应用启动。
<meta name="apple-mobile-web-app-capable" content="yes" />
如果 content 设置为 yes,则 Web 应用会在全屏模式下运行; 否则不会。默认行为是使用 Safari 来显示网页 内容。您可以决定网页是否以全屏模式显示 使用 window.navigator.standalone 只读布尔值 JavaScript 属性。
<ph type="x-smartling-placeholder"></ph> Apple
Android 版 Chrome 浏览器
Chrome 团队最近实施了一项功能,可指示浏览器 在用户将页面添加到主屏幕后以全屏模式启动页面。时间是 类似于 iOS Safari 模式。
<meta name="mobile-web-app-capable" content="yes" />
您可以将自己的 Web 应用设置为向 Google Cloud 应用 设备的主屏幕,并且让应用以全屏“应用模式”启动使用 Android 版 Chrome 的“添加到主屏幕”。
<ph type="x-smartling-placeholder"></ph> Google Chrome 浏览器
更好的选择是使用 Web 应用清单。
网络应用清单(Chrome、Opera、Firefox、Samsung)
Web 应用的清单 是一个简单的 JSON 文件 开发者将能够控制您的应用在相应区域向用户显示的方式 希望看到应用(例如移动设备主屏幕)、直接 用户能启动什么,更重要的是,如何启动应用在 清单将会让你能够更好地控制自己的应用 我们只是重点介绍如何发布您的应用。具体而言:
- 将清单的相关信息告知浏览器
- 说明启动方式
创建清单并将其托管在您的网站上后 只需在包含您应用的所有网页中添加一个链接标记,如下所示:
<link rel="manifest" href="/manifest.json" />
从 Android 版本 38(2014 年 10 月)开始,Chrome 就开始支持清单
这样,您就可以控制您的 Web 应用在安装后的显示方式
添加到主屏幕(通过 short_name
、name
和 icons
属性)及其
应在用户点击启动图标(通过 start_url
、
display
和 orientation
)。
示例清单如下所示。它只能显示 清单。
{
"short_name": "Kinlan's Amaze App",
"name": "Kinlan's Amazing Application ++",
"icons": [
{
"src": "launcher-icon-4x.png",
"sizes": "192x192",
"type": "image/png"
}
],
"start_url": "/index.html",
"display": "standalone",
"orientation": "landscape"
}
此功能是完全渐进式,可让您创建更好、更多的内容, 为支持该功能的浏览器用户提供集成体验。
当用户将您的网站或应用添加到主屏幕时, 让用户将其视为应用也就是说,您应引导用户前往 应用的功能,而不是商品着陆页。例如: 如果用户需要登录您的应用,那么这个页面就是一个不错的选择, 。
实用工具应用
大多数实用程序应用都将立即受益于此。对于 那么您可能希望它们像其他所有应用一样独立启动 在移动平台上展示如需指示应用独立启动,请将以下内容添加到 Web 应用清单:
"display": "standalone"
游戏
大多数游戏将立即受益于清单。广袤的 大多数游戏都希望以全屏模式启动,并强制特定 屏幕方向。
如果您正在开发纵向滚动游戏或《Flappy Birds》这样的游戏 则很可能希望游戏始终采用竖屏模式
"display": "fullscreen",
"orientation": "portrait"
另一方面,如果您开发的是益智游戏或 X-Com 之类的游戏, 那么可能希望游戏始终采用横向模式。
"display": "fullscreen",
"orientation": "landscape"
新闻网站
新闻网站在大多数情况下都是纯基于内容的体验。大多数开发者 一般不会想到为新闻网站添加清单。清单 可让您定义要发布的内容(新闻网站的头版)和 启动方式(全屏或以正常浏览器标签页的形式启动)。
具体选择哪种方法,取决于您,以及您认为用户喜欢以何种方式访问您的
体验如果您希望自己的网站拥有
那么可以将显示设置为 browser
。
"display": "browser"
如果您希望自己的新闻网站看起来像大多数以新闻为中心的应用,
体验,并从界面中移除所有与网络类似的 Chrome,
为此,请将 display 设置为 standalone
。
"display": "standalone"
弄虚作假:自动隐藏地址栏
您可以“伪装全屏模式”自动隐藏地址栏,如下所示:
window.scrollTo(0, 1);
这个方法非常简单,网页加载并指示浏览器栏 让开它遗憾的是,它不仅未标准化, 支持。您还必须解决一系列的怪异行为。
例如,当用户访问网页时,浏览器通常会
便可返回到该文件夹使用 window.scrollTo
会覆盖此设置,这会带来麻烦
用户。为了解决此问题,您必须将最后一个位置
localStorage 并处理边缘情况(例如,如果用户
网页在多个窗口中打开)。
用户体验指南
在构建充分利用全屏的网站时 您可能需要注意的一些潜在用户体验变化 构建用户喜爱的服务
不依赖导航控件
iOS 没有硬件返回按钮或刷新手势。因此,您必须 确保用户能够在应用内顺畅导航,而不会遭到锁定。
您可以检测设备是在全屏模式还是安装模式下运行 在所有主流平台上都能轻松实现
iOS
在 iOS 上,您可以使用 navigator.standalone
布尔值来查看用户是否
从主屏幕启动。
if (navigator.standalone == true) {
// My app is installed and therefore fullscreen
}
网络应用清单(Chrome、Opera、Samsung)
作为安装版应用启动时,Chrome 并非在真正的全屏模式下运行
因此 document.fullscreenElement
会返回 null 和 CSS 选择器
无效。
当用户在您的网站上通过手势请求全屏显示时,标准的 可以使用全屏 API,其中包括 CSS 伪选择器, 调整界面以响应全屏状态,如下所示
selector:-webkit-full-screen {
display: block; // displays the element only when in fullscreen
}
selector {
display: none; // hides the element when not in fullscreen mode
}
如果用户从主屏幕启动您的网站,display-mode
媒体
查询将设置为在网络应用清单中定义的内容。如果
会:
@media (display-mode: fullscreen) {
}
如果用户在独立模式下启动应用,则 display-mode
媒体查询将为 standalone
:
@media (display-mode: standalone) {
}
Firefox
当用户通过您的网站请求全屏显示,或用户启动应用时 在全屏模式下可以使用所有标准全屏 API,包括 CSS 伪选择器,可让您调整界面以响应全屏状态 如下所示:
selector:-moz-full-screen {
display: block; // hides the element when not in fullscreen mode
}
selector {
display: none; // hides the element when not in fullscreen mode
}
Internet Explorer
在 IE 中,CSS 伪类缺少连字符,但在其他方面的工作方式与 Chrome 和 Firefox。
selector:-ms-fullscreen {
display: block;
}
selector {
display: none; // hides the element when not in fullscreen mode
}
规范
规范中的拼写与 IE 使用的语法一致。
selector:fullscreen {
display: block;
}
selector {
display: none; // hides the element when not in fullscreen mode
}
让用户保持全屏体验
有时全屏 API 可能有点讲究。浏览器供应商不希望 将用户锁定在全屏页面中,这样他们就开发出了 请尽快退出全屏模式也就是说,您无法构建 跨越多个页面的全屏网站,原因如下:
- 使用
window.location = "http://example.com"
以编程方式更改网址会突破全屏。 - 用户点击您页面内的外部链接时将会退出全屏模式。
- 通过
navigator.pushState
API 更改网址也会在 全屏体验。
如果您想让用户保持全屏体验,有以下两种选择:
- 使用可安装的 Web 应用机制进入全屏模式。
- 使用 # fragment 管理界面和应用状态。
使用 #syntax 更新网址 (window.location = "#somestate"),并且
window.onhashchange
事件后,您可以使用浏览器自己的
历史记录堆栈来管理应用状态的变化,并允许用户使用
或提供简单的程序化返回按钮
使用 history API 来获得更棒的体验,具体如下所示:
window.history.go(-1);
让用户选择何时进入全屏模式
没有什么比网站执行某些操作更让用户烦恼了。 意外情况。用户进入您的网站时,不要试图诱骗他们 全屏。
不拦截第一个触摸事件并调用 requestFullscreen()
。
- 这很烦人。
- 浏览器可能决定在未来某个时间提示用户 允许应用占据全屏模式。
如果要以全屏模式启动应用,请考虑使用 不同平台的体验
不得滥发用户将应用安装到主屏幕
如果您计划通过安装式应用机制提供全屏体验 为用户着想。
- 谨慎小心。使用横幅或页脚告知他们可以安装 应用。
- 如果用户关闭了提示,请勿再次显示。
- 当用户首次访问时,他们不太可能想要安装应用,除非 他们对您的服务感到满意建议他们完成以下操作后 网站上的积极互动
- 如果用户经常访问您的网站,但并未安装应用,他们 用户将来也不太可能安装您的应用不要不断向用户发送垃圾信息。
总结
虽然我们没有完全标准化和实现的 API, 您可以使用本文中提供的指导轻松打造 充分利用用户的整个屏幕,无论用户使用何种客户端。