设备事件

随着智能手机与平板电脑的普及,为了更好地让用户与这些设备进行交互

浏览器引入了一种新的方式,而一类新的事件也应运而生,这就是设备事件

W3C从2011年开始制定关于设备事件的草案

下面将会介绍纳入草案的部分设备事件

PS.纳入草案不代表大多数浏览器已经实现

orientationchange事件

苹果公司为 Safari 添加了 orientationchange 事件,以便开发人员能够确定用户何时将设备由横向查看切换为纵向查看

在移动版本的 Safari 浏览器中,window 对象的 orientation 属性可能包含三个值

  1. 0 表示正常状态(即home键在下方)
  2. 90 向左旋转的横向模式(home键在右方)
  3. -90 向右旋转的横向模式(home键在左方)

只要用户改变了设备的查看模式,就会触发 orientationchange 事件

此时的 event 对象并不包含额外的信息

因为唯一与该事件相关的信息可以通过 window.orientation 访问到

该事件得到所有IOS设备的支持

由于可以将该事件看作 window 事件,所以可以通过指定 body 元素的 orientationchange 特性来指定事件处理程序

MozOrientation事件

Firefox 3.6 为移动设备的方向引入了一个名为 MozOrientation 的新事件(前缀Moz表示这是特定于浏览器开发商的事件不是标准事件)

当设备的加速计检测到设备方向改变时就会触发该事件

但是该事件与 IOS 中的 orientationchange 事件不同

该事件只能提供一个平面的方向变化

该事件在 window 上触发

此时的 event 事件对象包含三个额外属性:

  1. x 向右倾斜减小,反之增大(-1~1,竖直为0)
  2. y 以屏幕面对用户,向远离用户倾斜减小,反之增大(-1~1,不倾斜为0)
  3. z 检测重力加速度(0 失重 1静止)

该事件只有带加速计的设备才支持

deviceorientation事件

本质上,DeviceOrientationEvent 规范定义的 deviceorientation 事件与 MozOrientation 事件类似

也是通过加速计检测到方向变化时在 window 上触发

不过区别在于,该事件用于告诉用户设备在空间中朝向什么方向,而不是如何移动的

设备在三维空间中的定位,依靠 x、y、z 三个轴来定位

当设备静止放在水平表面时三个值都为0

其中 x轴的方向 从左到右,y轴方向从下到上,z轴方向从屏幕内向屏幕外

在触发该事件时,事件对象 event 包含的额外信息有以下五种:

  1. alpha:在围绕z轴旋转时(左右旋转)设备方向y轴与初始y轴的夹角,其值为 0~360 的浮点数
  2. beta:在围绕x轴旋转时(前后旋转)设备方向z轴与初始z轴的夹角,其值为 -180~180 的浮点数
  3. gamma:在围绕y轴旋转时(扭转)设备方向z轴与初始z轴的夹角,其值为 -90~90 的浮点数
  4. compassCalibrated:一个布尔值表示设备的指南针是否校准过

通过以上信息可以根据设备的方向,重新排列或者修改屏幕上的元素

该事件得到移动 webkit 浏览器的支持

devicemotion事件

DeviceOrientation Event 规范还定义了一个 devicemotion 事件

该事件用于告知当前设备的移动状态,如设备是否正在移动,在朝那个方向移动等

该事件依旧由加速计检测,当该事件触发时,event对象包含以下属性:

  1. acceleration:一个包含 x、y、z属性的对象,告诉你设备在这三个轴上的加速度(不考虑重力)
  2. accelerationIncludingGravity:一个包含x、y、z属性的对象,告诉你设备在这三个方向上的加速度(考虑重力)
  3. interval:以毫秒表示的时间值,必须在下一次devicemotion事件触发前传入,在每个事件中应该是一个常量
  4. rotationRate:一个包含 设备的 alpha beta gamma 属性的对象

在使用时,若读取不到加速器给予的数据(设备没有加速计),以上属性除 inertval 外都为 null

所以在使用这些值之前最好都检测一下,要使用的值是否为 null,这样可以有效提高我们代码的健壮性

Javascript高级编程学习笔记(68)—— 事件(12)设备事件的更多相关文章

  1. Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟

    事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...

  2. Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟

    IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...

  3. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

  4. Javascript高级编程学习笔记(70)—— 事件(14)内存和性能

    由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...

  5. Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件

    触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...

  6. Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件

    DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...

  7. Javascript高级编程学习笔记(66)—— 事件(10)变动事件

    变动事件 DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示 变动事件是为XML或HTML DOM 设计的,并不特定于某种语言 DOM2级定义了如下变动事件: DOMSubtreeModif ...

  8. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  9. Javascript高级编程学习笔记(63)—— 事件(7)鼠标及滚轮事件

    鼠标与滚轮事件 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备 DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对 ...

随机推荐

  1. Ocelot的学习

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.认证.鉴权.简单缓存.限流熔断.负载均衡器等.简单的来说Ocelot是一堆的asp.net core midd ...

  2. weblogic安装升级配置

    本次操作是主要围绕如何搭建weblogic服务器升级weblogic软件及配置服务,总共有三大步骤,可划分为六个小步骤: 选取已有环境,准备weblogic压缩包,java包等 准备操作系统环境用户目 ...

  3. NC 自定义项参照设置为查询条件

    select * from pub_query_condition where pk_templet in (select id from pub_query_templet where node_c ...

  4. 自己搭建git服务器

    1.安装git 2.创建git用户,给权限(git目录下) 3.设置公钥 4.初始化git仓库 5.给权限(仓库) 连接到本地

  5. OO前三次作业分析

    一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...

  6. 新学的的matplotlib库~~~~

    import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,6,100) y=np.cos(2*np.pi*x)*np.exp ...

  7. [gazebo-1] process has died [pid 22855, exit code 255,

    [gazebo-1] process has died [pid 22855, exit code 255, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver ...

  8. robotframework+selenium搭配chrome浏览器,web测试案例(搭建篇)

    这两天发布版本 做的事情有点多,都没有时间努力学习了,先给自己个差评,今天折腾了一天, 把robotframework 和 selenium 还有appnium 都研究了一下 ,大概有个谱,先说说we ...

  9. T-3-java核心API-基础类

    一.API 现成的类(程序) Java API是java(Oracle)提供的系统标准API. 第三方的jar包API,如:JUnit.jar. 可以自己开发一些API. 一般情况下任何技术都有现成的 ...

  10. 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...