我们能够轻松打造沉浸式全屏网站
但与网络上的任何应用一样,您有多种方法可以实现这一目的。
如今越来越多的浏览器支持“安装
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。
。
注意 :您会注意到,在带有前缀的版本中,“S”一词的大小写不一致。。这很不雅观,但也正是所实施的规范存在的问题。
当您的应用全屏显示时,您将不再拥有浏览器的界面控件
可用的资源这将改变用户与
体验它们没有“前进”等标准导航控件
和向后他们却没有“刷新”按钮这一应急方法。时间是
来满足这种情况您可以借助一些 CSS 选择器
在浏览器进入时更改网站的样式和外观
全屏模式。
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
document.body.requestFullscreen();
},
false,
);
上面的示例有点人为制造:我把所有复杂的因素都隐藏在
供应商前缀的使用
实际代码要复杂得多。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 提示
全屏显示文档
图 1:body 元素处于全屏模式。
您很自然地认为会让 body 元素进入全屏模式,
在基于 WebKit 或 Blink 的渲染引擎中,您会发现
将正文宽度缩减到尽可能小的尺寸,包含所有
内容。(Mozilla Gecko 没有问题。)
图 2:文档元素处于全屏模式。
要解决此问题,请使用文档元素,而不是正文元素:
document.documentElement.requestFullscreen();
使视频元素全屏显示
让视频元素全屏显示的方法与让其他任何元素
元素全屏显示。您对视频调用 requestFullscreen 方法
元素。
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
var videoElement = document.getElementById('videoElement');
videoElement.requestFullscreen();
},
false,
);
如果您的
一旦用户进入全屏模式,便无法再控制视频。通过
推荐方法是使用一个用于封装视频的基本容器
您希望用户看到的控件
var goFS = document.getElementById('goFS');
goFS.addEventListener(
'click',
function () {
var container = document.getElementById('container');
container.requestFullscreen();
},
false,
);
这种做法的灵活性更高
对象与 CSS 伪选择器相关联(例如,隐藏“goFS”按钮)。
#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;
}
通过使用这些模式,您可以检测全屏模式是否运行,并据以调整
界面,例如:
提供返回初始页的链接
提供一种关闭对话框或回退的机制
从主屏幕以全屏模式启动网页
您无法在用户导航至该网页时启动全屏网页。
浏览器供应商非常清楚,每次网页加载时都有全屏体验
是个巨大的麻烦,因此需要用户手势才能进入全屏模式。
供应商允许用户“安装”而安装这一操作
它向操作系统发出信号,表明用户希望在
平台。
在各大移动平台上,使用以下任一方法很容易实现
元标记或清单文件。
iOS
自从 iPhone 发布以来,用户就能够安装 Web 应用
主屏幕,并让它们作为全屏 Web 应用启动。
如果 content 设置为 yes,则 Web 应用会在全屏模式下运行;
否则不会。默认行为是使用 Safari 来显示网页
内容。您可以决定网页是否以全屏模式显示
使用 window.navigator.standalone 只读布尔值 JavaScript 属性。
Apple
Android 版 Chrome 浏览器
Chrome 团队最近实施了一项功能,可指示浏览器
在用户将页面添加到主屏幕后以全屏模式启动页面。时间是
类似于 iOS Safari 模式。
您可以将自己的 Web 应用设置为向 Google Cloud 应用
设备的主屏幕,并且让应用以全屏“应用模式”启动使用
Android 版 Chrome 的“添加到主屏幕”。
Google Chrome 浏览器
更好的选择是使用 Web 应用清单。
网络应用清单(Chrome、Opera、Firefox、Samsung)
Web 应用的清单
是一个简单的 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);
注意 :注意:我以朋友身份告诉您。它存在。虽然是个问题,但其实是个黑客行为。请不要使用。- Paul
这个方法非常简单,网页加载并指示浏览器栏
让开它遗憾的是,它不仅未标准化,
支持。您还必须解决一系列的怪异行为。
例如,当用户访问网页时,浏览器通常会
便可返回到该文件夹使用 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,
您可以使用本文中提供的指导轻松打造
充分利用用户的整个屏幕,无论用户使用何种客户端。
反馈