几种不常用Web API(振动、重力感应、联网状态、系统电量信息、页面可见性、canvas转base64、监听屏幕旋转、元素全屏显示)

简介: navigator对象中有一些不常用的API,以下主要介绍vibrate振动,deviceorientation重力感应,online联网状态,getBattery系统电量信息,visibilitychange页面可见性,toDataURL(canvas转base64),orientationchange监听屏幕旋转和fullScreen元素全屏显示。

内容介绍

  navigator对象中有一些不常用的API,以下主要介绍vibrate振动,deviceorientation重力感应,online联网状态,getBattery系统电量信息,visibilitychange页面可见性,toDataURL(canvas转base64),orientationchange监听屏幕旋转和fullScreen元素全屏显示。

一、vibrate振动

1、判断设备是否支持振动
// 判断设备是否支持振动(部分浏览器不支持)——vibrate
var vibrateStatus = window.navigator.vibrate();
2、单次震动
// 单次震动200ms
window.navigator.vibrate(200);
window.navigator.vibrate([200]);
3、间接振动
// 间接振动(振动100ms,暂停200ms,继续振动300ms,暂停400ms...,奇数振动,偶数暂停)
window.navigator.vibrate([100, 200, 300, 400]);
4、停止振动
// 停止振动(空白,[0]或数组全部为0)
window.navigator.vibrate();
window.navigator.vibrate([0]);
window.navigator.vibrate([0, 0, 0]);
5、持续振动
// 持续振动(使用setInterval和clearInterval控制开始和停止)
var vibrateInterval;

function startVibrate(duration) {
    navigator.vibrate(duration);
}

function stopVibrate() {
    if (vibrateInterval) clearInterval(vibrateInterval);
    navigator.vibrate(0);
}

function startPeristentVibrate(duration, interval) {
    vibrateInterval = setInterval(function() {
        startVibrate(duration);
    }, interval);
}

二、deviceorientation重力感应

// 重力感应方向输出——deviceorientation
if (window.DeviceOrientationEvent) {
    window.addEventListener("deviceorientation", function(event) {
        // alpha: 在Z轴上的角度
        var rotateDegrees = event.alpha;
        // gamma: 从左到右
        var leftToRight = event.gamma;
        // beta: 从前到后的运动
        var frontToBack = event.beta;
        handleOrientationEvent(frontToBack, leftToRight, rotateDegrees);
    }, true);
}
var handleOrientationEvent = function(frontToBack, leftToRight, rotateDegrees) {
    // TODO
};

三、online浏览器联网状态

1、获取当前联网状态
// 获取当前联网状态
if (navigator.onLine) {
    alert('online')
} else {
    alert('offline');
}
2、监听联网变化状态
// 监听联网变化状态
window.addEventListener("offline", function(e) {
    alert("offline");
})
window.addEventListener("online", function(e) {
    alert("online");
})

四、getBattery系统电量信息

  getBattery提供系统电量信息,返回一个battery的promise对象,然后resolve得到BatteryManager对象

// getBattery提供系统电量信息,返回一个battery的promise对象,然后resolve得到BatteryManager对象
navigator.getBattery().then(function(battery) {  
    console.log(battery)
        // 布尔值,当前是否正在充电
    let charging = battery.charging,
        // 数字,代表距离充电完毕还剩多少秒, 0 为充电完毕
        chargingTime = battery.chargingTime,
        // 数字, 代表距离电池耗空并挂起还需多少秒
        dischargingTime = battery.dischargingTime,
        // 代表电量,0.0-1.0
        level = battery.level;

    // 电池充电状态更新时调用
    battery.addEventListener('chargingchange', function() {
            alert(battery.charging ? '在充电' : '没在充电')
        })
        // 电池充电时间更新时触发
    battery.addEventListener('chargingtimechange', function(info) {
            console.log(info)
        })
        // 电池断开充电时间更新时触发
    battery.addEventListener('dischargingtimechange', function(info) {
            console.log(info)
        })
        // 电池电量更新时触发
    battery.addEventListener('levelchange', function(info) {
        console.log(info)
    })
});

五、visibilitychange页面可见性

// 页面可见性:
document.addEventListener("visibilitychange", function() {
    document.title = document.hidden ? "用户离开了" : "用户回来了";
});

六、toDataURL(canvas转base64)

<canvas width="200" height="500"></canvas>
let canvas = document.querySelector('canvas');
let pen = canvas.getContext('2d');
pen.lineTo(100, 50);
pen.lineTo(150, 100);
pen.lineTo(100, 100);
pen.lineTo(100, 50);
pen.lineTo(100, 300);
pen.lineTo(80, 300);
pen.lineTo(50, 330);
pen.lineTo(150, 330);
pen.lineTo(120, 300);
pen.lineTo(100, 300);
pen.strokeStyle = 'red';
pen.stroke();
var img = document.createElement("img");
img.src = canvas.toDataURL("image/png");
// 输出base64
console.log(img.src);

七、orientationchange监听屏幕旋转

window.addEventListener("orientationchange", () => {
    document.body.innerHTML += `<p>屏幕旋转后的角度值:${window.orientation}</p>`;
}, false);

可结合vconsole在移动端进行测试,使用方法如下:

移动端调试工具vconsole使用方法:https://blog.csdn.net/cainiaoyihao_/article/details/115461949
<!-- 引入vconsole -->
<script src="http://wechatfe.github.io/vconsole/lib/vconsole.min.js?v=3.2.0"></script>
// 初始化
var vConsole = new VConsole();

完整代码:

<body>
    <!-- 引入vconsole -->
    <script src="http://wechatfe.github.io/vconsole/lib/vconsole.min.js?v=3.2.0"></script>
    <script>
        // 初始化
        var vConsole = new VConsole();

        window.addEventListener("orientationchange", () => {
            console.log(window.orientation);
            document.body.innerHTML += `<p>屏幕旋转后的角度值:${window.orientation}</p>`;
        }, false);
    </script>
</body>

八、fullScreen元素全屏显示

// Esc退出全屏状态
// document.documentElement.webkitRequestFullScreen();
document.getElementById("csdn-toolbar").webkitRequestFullScreen();

注:
  部分浏览器不支持,注意兼容性


标签:javascript,navigator,振动,重力感应,联网状态,系统电量,页面可见性,canvas转base64,监听屏幕旋转,元素全屏显示


更多演示案例,查看 案例演示


欢迎评论留言!

相关文章
|
JSON API 数据格式
抖音商品列表API秘籍!轻松获取商品列表页面数据
抖音商品列表API是抖音开放平台的核心电商接口,支持按分类、关键词、销量等条件筛选商品,具备分页、排序、数据过滤等功能,适用于电商整合、竞品分析等场景。接口返回JSON格式数据,包含商品列表、总数及分页信息,提供Python请求示例,便于开发者快速接入。
1302 0
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
1211 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
数据采集 JSON 监控
1688 宝贝详情页面API接口系列指南
本文介绍了如何通过 1688.item_get API 获取 1688 平台上商品的详细信息,包括标题、价格、库存等,满足电商数据采集与分析需求。接口需传入商品 ID 等参数,返回 JSON 格式数据。文中提供了 Python 请求示例,使用 requests 库调用 API,开发者需替换实际 URL、API 密钥及商品 ID。代码包含错误处理,便于调试和应用拓展。此方法适用于商品监控、竞品分析等场景。
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
前端开发
震惊!Web 前端行内元素和块级元素的 “巅峰对决”,究竟谁能主宰页面布局?
【8月更文挑战第26天】在Web前端开发中,掌握行内元素与块级元素的区别十分重要。块级元素如`&lt;p&gt;`、`&lt;div&gt;`等,特性为自动换行并可设置宽高;而行内元素如`&lt;span&gt;`则在同一行显示且无法直接设置宽高。二者默认样式亦不同,但可通过CSS调整显示方式,灵活应用于页面布局设计中,实现更优视觉效果。
343 1
|
XML JavaScript 前端开发
哇塞!Web 前端惊现 DOM 元素神操作,一场惊心动魄的网页变革,你准备好了吗?
【8月更文挑战第23天】在Web前端开发中,熟练操作DOM元素至关重要。DOM作为一种编程接口,将HTML/XML文档表示为节点树,便于使用JavaScript访问及修改文档内容与结构。
346 0
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
450 1