Lambda博客
  • 自我介绍
  • SSR
    • 浅谈SSR
  • React
    • 页面路由——React-Router
    • 管好你的状态——React-Redux
    • 一个哪行——React详解
    • 左膀右臂一个不少——React初探
  • 问题记录
    • js-xlsx实现纯前端导出excel表格
    • 前端开发需要了解的东西
    • 打造高性能网站
  • JavaScript学习笔记
    • 语法和API
    • js-垃圾回收
    • 收集的JS使用技巧
    • 执行机制
    • 原型和原型链
    • 执行上下文
    • 事件循环
    • JavaScript手写代码
    • 43道JS面试题
    • 悄悄的带走了你的东西——闭包详解
    • 你是个富二代吗?——JavaScript作用域链
    • 捉摸不透的女生——JavaScript类型转换
    • 这是你的女神!——JavaScript
  • 网络学习笔记
    • 强不强——HTTP-协商缓存VS强缓存
    • 网络缓存
    • 我要飞的更高——计算机网络
    • 快点!再快点!——CDN
    • 喜怒哀乐多状态——HTTP状态码
    • 你会爱上我的(ಥ_ಥ) ——TCP详解
    • 隔壁老王想篡位?门都没有——同源策略
  • 软技能
  • 安全专题
    • 保护好自己——网站安全,预防
  • 浏览器兼容性
    • 我是个好人——浏览器兼容性
  • 多图片加载——懒加载详解
  • 数据结构
  • Node
    • Node初探
  • Typescript
    • JS Plus 真香——初探 TypeScript
  • 设计模式
    • 不要花里胡哨,要一套一套——设计模式(1)
    • 学会“套路”——设计模式(2)
  • Vue
    • 实操实干——vue实例记录
    • 停下来,问问自己——Vue-刨根问底
    • 你有喘息的机会吗?——Vue,逐步了解
    • 你累吗?来来来,安利框架——Vue-初次见面
  • 小程序
    • 今天天气怎么样——记一次小程序开发
  • Webpack
    • 蛋糕分割整合工具——Webpack-前端工程化
  • 你一块,我一块——Web-modules 前端模块化
  • HTML5
    • 你会画小猪佩奇吗?—— canvas
    • 画个矢量图——HTML5-SVG
    • 听说你爱闹腾——HTML5-多媒体
    • 动画神器——HTML5-requestAnimationFrame
    • 留下痕迹——HTML5-客户端存储
    • 你知道指北针吗?——HTML5-DeviceMotionEvent
    • 你在哪啊?我在这啊——HTML5-Geolocation
    • 你到这,你到那——HTML5-拖拽
    • 你从这,到那——HTML5-拖拽上传文件
    • 开启前端之路——HTML 标签
  • 瀑布流(无限滚动)
  • 我是怎么来的?——浏览器渲染原理
  • Css
    • 由大变小,你行吗 —— 移动端
    • 动起来,这样比较炫—— CSS3 动画
    • 请不要拐弯抹角 —— CSS3 选择器
    • 想炫吗?—— CSS3 属性
    • 最后的最后——CSS自问自答
    • 万事开头难?——深入学习前端常见布局
    • 一入前端深似海——BFC剖析
    • 还有哪些好玩的东西——CSS提升
    • 那些好看的页面是怎么形成的——CSS 初识
  • 拿个小本本记下——Cookie
由 GitBook 提供支持
在本页
  • 事件介绍
  • 用法简介
  • 代码示例
在GitHub上编辑
  1. HTML5

你知道指北针吗?——HTML5-DeviceMotionEvent

事件介绍

  1. deviceorientation 提供设备的物理方向信息,表示为一系列本地坐标系的旋角。

  2. devicemotion 提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标。其还提供了设备在坐标系中的自转速率。若可行的话,事件应该提供设备重心处的加速信息。

  3. compassneedscalibration 用于通知 Web 站点使用罗盘信息校准上述事件。

用法简介

deviceorientation

注册一个 deviceorientation 事件的接收器

window.addEventListener("deviceorientation", function(e) {
  console.log(e);
  // 处理event.alpha、event.beta及event.gamma
  document.querySelector("#item").innerHTML = `
  <p> 设备沿z轴上的旋转角度${e.alpha} </p>
  <p> 设备在x轴上的旋转角度,描述设备由前向后旋转的情况 ${e.beta}  </p>
  <p>表示设备在y轴上的旋转角度,描述设备由左向右旋转的情况${e.gamma} </p>
  <p>与北方向的角度差值,正北为0度,正东为90度,正南为180度,正西为270度${e.webkitCompassHeading}</p>
  <p>指北针的精确度,表示偏差为正负多少度${e.webkitCompassAccuracy} </p>
  `;
});

需要在手机端使用

安卓端不支持显示 webkitCompassHeading 和 webkitCompassAccuracy 小伙伴可以通过苹果手机访问获取

  • deviceorientation 事件包含的属性

    • alpha 表示设备沿 z 轴上的旋转角度,范围为 0~360

    • beta 表示设备在 x 轴上的旋转角度,范围为 -180~180,,它描述的是设备由前向后的旋转的情况

    • gamma 表示设备在 y 轴上的旋转角度,范围为-90~90,它描述的是设备在由左向右旋转的情况

    • webkitCompassHeading 与正北方向的角度差值,正北为 0 度,正东为 90 度,正南为 180 度,正西为 270 度,因为 0 表示正北,所以叫指北针

    • webkitCompassAccuracy 指北针的精确度,表示偏差为正负多少度,一般为 10

compassneedscalibration

使用自定义界面通知用户校准罗盘

window.addEventListener("compassneedscalibration", function(event) {
  alert("您的罗盘需要校准,请将设备沿数字8方向移动。");
  event.preventDefault();
});

devicemotion

注册一个 devicemotion 时间的接收器

window.addEventListener("devicemotion", function(event) {
  console.log(event);
});
  • deviceorientation 事件包含的属性

    • accelerationIncludingGravity 包括重心引力,z 轴方向加了 9.8,在 x,y 方向上的值两者相同

    • acceleration 重力加速度(需要陀螺仪支持)

    • rotationRate (alpha, beta, gamma) 旋转速率

    • interval 获取时间间隔

均为只读属性

代码示例

我们尝试使用 HTML 的这个对象方法实现一个摇一摇功能

let SHAKE_THRESHOLD = 800
let last_update = 0
let x, y, z, last_x = 0, last_y = 0, last_z = 0
function deviceMotionHandler (eventData) {
  let acceleration = eventData.accelerationIncludingGravity
  let curTime = +new Date()
  if ((curTime - last_update) > 300) {
    let diffTime = curTime - last_update
    last_update = curTime
    x = acceleration.x
    y = acceleration.y
    z = acceleration.z
    let speed = Math.abs(x + y + z -last_x - last_y - last_z) / diffTime * 10000

    if (speed > SHAKE_THRESHOLD) {
      // 这里写要执行的代码
    }
    last_x = x
    last_y = y
    last_z = z
  }
}

if (window.DeviceMotionEvent) {
  window.addEventListener('devicemotion', deviceMotionHandler, false)
} else {
  alert('Not supported on your device')
}
上一页留下痕迹——HTML5-客户端存储下一页你在哪啊?我在这啊——HTML5-Geolocation

最后更新于3年前

nNsGMF.png