核心提示:WEB API 接口说明 列举一些不常用的 Web API 接口震动API (Vibration) 通知API(Notifications) 地理位置API(Geolocation) 全屏API(Fu...
WEB API 接口
说明
震动API (Vibration) 通知API(Notifications) 地理位置API(Geolocation) 全屏API(Fullscreen)列举一些不常用的 Web API 接口
JavaScript 标准参考教程 MDN参考
1. 震动API (Vibration)
大多数现代移动设备包括振动硬件,允许通过接口触发设备震动,如果设备不支持则没有反馈
// 单次震动,参数为代表震动时长的数字
window.navigator.vibrate(200);
// 多次震动,参数为交替震动和停止的时长的数组
window.navigator.vibrate([200, 100, 300]); // 表示震动 200 ms ,停止 100ms 后再震动 300ms
// 停止震动,设置参数为 0 或者 空白数组 即可取消震动
window.navigator.vibrate([200, 100, 400, 100, 1000]);
setTimeout(function () {
window.navigator.vibrate(0);
}, 400)
2. 通知API(Notifications)
允许网页或者应用程序在系统级别发送在页面外部显示的通知,这样即使应用程序空闲或者在后台,Web应用程序也会想用户发送信息
// 查看用户是否允许通知,相同的域名只要获取一次权限,只有用户允许才能使用通知API
console.log(Notification.permission);
/*
default: 默认,未选择
granted: 允许通知
denied: 用户拒绝
*/
// 向用户请求权限,当用户状态为 default 也就是没有选择是否接收的时候可以使用
Notification.requestPermission().then(function (status) {
if (status === 'granted') {
console.log('允许通知');
} else if (status === 'denied') {
console.log('拒绝通知');
}
})
// 向用户推送通知,需要有权限后才行
const title = '通知标题';
const options = {
body: '通知的内容',
tag: 'noti', // 代表通知的一个识别标签,相同tag时只会打开同一个通知窗口
icon: 'https://xxx.png', // 通知图标
image: 'https://xxx.png', // 通知图像
data: { // 关联与此通知的数据
link: 'https://xxx.com'
},
requireInteraction: true // true 不自动关闭通知 false 自动关闭
};
const n = new Notification(title, options);
n.addEventListener('show', function () { // 当通知被显示给用户时触发
console.log('show');
});
n.addEventListener('click', function (e) { // 当用户点击通知时触发
console.log('click');
const link = e.currentTarget.data.link; // 得到 data 中数据
window.open(link, '_blank');
})
n.addEventListener('close', function () { // 当通知被关闭时触发
console.log('close');
})
n.addEventListener('error', function () { // 当通知发生错误的时候触发
console.log('error');
})
注意: Chrome 62 及以上版本,Notification API不支持 http;PC 尚可,移动端基本不支持
参考 HTML5 桌面通知:Notification API
3. 地理位置API(Geolocation)
允许通过应用程序提供当前浏览器所在位置,需要提前请求用户许可,最新版本的浏览器还要求网址是‘安全的’(https),否则不能获取地理位置信息
// 判断是否可以使用
if (!navigator.geolocation) {
console.log('不支持定位');
} else {
console.log('支持定位');
// 获取当前定位 getCurrentPosition, 返回的是一个低精度结果
navigator.geolocation.getCurrentPosition(function (position) {
console.log(position.coords);
/*
coords: {
latitude: 纬度,
longitude: 经度,
altitude: 海拔高度,
accuracy: 精度
}
*/
})
// 监视定位,可以响应定位数据发生的变更,回调函数会被调用多次
const successWatch = function (position) {
console.log(position);
}
const errorWatch = function (err) {
console.log(err);
}
const watchOptions = {
enableHighAccuracy: true, // 是否要求高精度的地理位置信息
maximumAge: 30000, // 缓存的有效时间限制
timeout: 27000 // 超时限制
};
const watchID = navigator.geolocation.watchPosition(successWatch, errorWatch, watchOptions);
// 停止监听用户位置
navigator.geolocation.clearWatch(watchID);
}
注: 新版本的浏览器,出于安全考虑,在非 https 环境禁止使用
4. 全屏API(Fullscreen)
控制全屏显示,让一个 Element 节点占满整个屏幕,不同浏览器使用需要加上前缀
const box = document.querySelector('#box');
// 判断文档是否可以切换到全屏状态
const fullscreenEnabled =
document.fullscreenEnabled ||
document.mozFullScreenEnabled ||
document.webkitFullscreenEnabled ||
document.msFullscreenEnabled;
if (fullscreenEnabled) {
box.onclick = function () {
// 查找是否有处于全屏状态的节点
const fullscreenElement =
document.fullscreenElement ||
document.mozFullScreenElement ||
document.webkitFullscreenElement;
if (!fullscreenElement) {
launchFullscreen(box);
} else {
exitFullscreen();
}
}
}
// 使某一个节点全屏显示
function launchFullscreen(element) {
if(element.requestFullscreen) {
element.requestFullscreen();
} else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if(element.msRequestFullscreen){
element.msRequestFullscreen();
} else if(element.webkitRequestFullscreen) {
element.webkitRequestFullScreen();
}
}
// 取消全屏
function exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}
放大一个节点时,Firefox和Chrome在行为上略有不同, Firefox自动为该节点增加一条CSS规则,将该元素放大至全屏状态,width: 100%; height: 100%,而Chrome则是将该节点放在屏幕的中央,保持原来大小,其他部分变黑。为了让Chrome的行为与Firefox保持一致,可以自定义一条CSS规则。来源
#box{
width: 300px;
height: 300px;
border: 1px solid green;
background: #969696;
&:-webkit-full-screen{
width: 100%;
height: 100%;
}
}
注意:如下给 ‘flot’ 设置绝对定位后,如果使 ‘box’ 全屏显示,那么’flot’ 会被覆盖而显示不出
this is box
flot


