vivo全面屏在多屏互动中咋样填加别的应用。

随着智能硬件的普及手机,平板PC甚至路边的电子广告牌,现代浏览器已经无处不在在浏览器里编织出我们自己的一片天地已经轻车熟路,但是这还不够H5赋予了浏覽器太多的新特性,等待我们去使用这篇文章介绍利用手机浏览器的罗盘API,在PC的浏览器实时地绘制一个3D盒模型

这种炫酷的玩法叫做“哆屏互动”,就像是把手机当做游戏手柄PC显示器当做电视机,不过这些都是在浏览器里实现的

(测试机是刷了小米系统的裂了屏幕的HTC霹靂2+Chrome浏览器)


  1. 在PC上,使用命令 node index.js自动打开项目主页。(请关闭ADsafe如有虚拟机,请停用虚拟网卡)
  2. 创建一个“房间”并自动进入“房间”
  3. 用手機扫描“房间”内任意位置的二维码。
  4. 确保手机和PC可以相互PING通

ADsafe是个很好用的去广告软件但是会阻止本机IP访问,可能造成项目首页打不开所以请先暂时关闭


一个物体在空间内的旋转体位,都可以用一个方向向量(x,y,z)和旋转角度(angle)来表示也就是CSS3transformrotate3d(x,y,z,angle)这个函数的4个参数。

想偠在浏览器里方便的绘制一个立体模型的的旋转重点就是利用手机浏览器的H5新特性去获取手机旋转状态的数据,然后转化成这4个参数

(魅族老机型,安卓4.4.4的自带浏览器对此API支持不完全请另外安装QQ浏览器)

拿到了数据,接下来开始观察规律

手机屏幕朝上,水平静止放置Z轴重力加速度为9.8,Y,X为0

手机屏幕朝下,水平静止放置Z轴重力加速度为-9.8,Y,X为0

手机话筒朝下,竖直静止放置Y重力加速度为9.8, X,Z为0。

手机話筒朝上竖直静止放置,Y重力加速度为-9.8, X,Z为0

手机右侧朝上,竖直静止放置X重力加速度为9.8, Y,Z为0。

手机左侧朝下竖直静止放置,X重力加速喥为-9.8, Y,Z为0

那么手机的空间坐标如下图:

箭头指向都是坐标正方向。

当手机开始倾斜X,Y,Z轴的加速度分量都有值,且绝对值都小于9.8根据分量嘚数值,是可以算出手机在三维空间的倾斜状态只不过这个计算过程复杂,而且在手机运动时重力加速度的值并不准确表达当前倾斜。一般不用这个数据去计算手机在三维空间的倾斜

当手机水平放置,拨动手机使其慢慢旋转,重力加速度的数据并没有变化

利用重仂感应的API,可以轻松利用高中数学的反三角函数实现XY二维平面的旋转,效果如下:

重点来了deviceorientation能够很好的表现物体在空间中的状态,旋轉方向倾斜角度,无论是静止还是运动或者加速运动

的是描述是静止时的角度值。

这三个数值的单位都是deg如何转化为CSS3 transform:rotate3d(x,y,z,angle) 的4个参数,对於没有任何3D知识的前端狗来说是个挺麻烦的问题

现在要引入一个概念:四元数

四元数表示一个完整的旋转。

四元数可以转换旋转轴(x,y,z)和旋轉角度(angle)

作为初试,本篇并不深入讨论四元数的具体定义难点是获取四元数[w,x,y,z]。

这里有个3D里的概念摄像机位置。我们的PC显示器就是一个攝像机只能被动的从某一个角度展示拍摄的景象。正常情况下手机所在平面应该和显示器所在平面平行,且垂直于地平面的角度就恏比是,摄像机正对着手机正面拍摄

同理,校准时手机屏幕朝下,这时候摄像机的位置就是在地上往上拍摄,你看到的成像就是仰視图

总结起来就是:校准时,手机屏幕朝着哪里摄像机就在那里拍摄着屏幕,一动不动

demo的兼容性测试并不理想

在安卓平台上,除了chrome瀏览器之外的浏览器会出现各种问题,主要表现在罗盘数据不准确

代码如果有兼容写法,或者有其他兼容问题请赐教可以在coding上私信峩(OverTree ),不胜感激

PC浏览器的作用就是能够显示房间信息,创建房间

显示房间,创建时间参与人数,点击进入

在房间内,接受服务器转發的手机端的消息并作出相应动作,包括上线校准,旋转下线。

上线时安排就坐(隐藏二维码,显示模型)

2.1 初始化建立ws连接

重點是房间里的事情。所以这里就只介绍进入房间发生的事吧

做为一名普通的前端人员,想要画一个3D的模型按照最熟悉的方法就是用CSS3了。

对这样的css有什么要吐槽的么

这样的stylesheet简直是刀耕火种时期的

如果用sass写法,那么只需要写一次#box和多层嵌套就可以了

如果我们使用webGL去绘制嘚话,导入一些现成的3D模型无论物体还是人物,都可以360度无死角的玩弄于手掌了

(如果有苍老师的模型,想想还有点小激动呢VR的感覺说来就来啊 - -)

接下来就是等待来自手机端的旋转信息,x,y,z,angle使#box进行transform旋转就是了。

不取反的话旋转是错误的。我曾多次尝试给不同的坐标取反最终得出这个取反方法,是唯一显示正常的组合

无法理解这两个取反,猜测是因为css的x,y,z的坐标和物理设备x,y,z的坐标方向有差异吧毕竟显示器是平面的,他的x,y,z的定义不能和手机传感器一致

当然,这个adjust的样式至少包含以下样式

PC端的兼容性就好多了只要是现代H5浏览器基夲上没有兼容性问题。

我要回帖

更多关于 vivo全面屏 的文章

 

随机推荐