Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谁知道Windows Phone上的设备方向?_Javascript_Html_Internet Explorer_Windows Phone 8 - Fatal编程技术网

Javascript 谁知道Windows Phone上的设备方向?

Javascript 谁知道Windows Phone上的设备方向?,javascript,html,internet-explorer,windows-phone-8,Javascript,Html,Internet Explorer,Windows Phone 8,设备定向事件的w3c标准: W3C标准描述了当设备绕其z轴旋转时,该事件的alpha属性应该如何改变 当您直视屏幕时,将手机放在面前时,z轴指向您。它是与屏幕重合的平面的法向量 在我看来,在我的windows phone上,情况似乎有点不同。alpha属性也会随着x轴的旋转而改变(即在portait模式下) 如何重复: 将手机举在面前(在portait模式下) 确保gamma为负数,这意味着手机会稍微向后倾斜 现在确保alpha约为零度,这意味着手机位于y轴的中心 将手机稍微向左倾斜,使alp

设备定向事件的w3c标准:

W3C标准描述了当设备绕其z轴旋转时,该事件的alpha属性应该如何改变

当您直视屏幕时,将手机放在面前时,z轴指向您。它是与屏幕重合的平面的法向量

在我看来,在我的windows phone上,情况似乎有点不同。alpha属性也会随着x轴的旋转而改变(即在portait模式下)

如何重复:

  • 将手机举在面前(在portait模式下)
  • 确保gamma为负数,这意味着手机会稍微向后倾斜
  • 现在确保alpha约为零度,这意味着手机位于y轴的中心
  • 将手机稍微向左倾斜,使alpha约为30度,同时确保gamma保持为负值
  • 现在将手机稍微转向你的方向,使伽马值为正值
  • 请注意,当gamma变为正值时,alpha值会跳跃180度。W3C标准中没有描述这一点,或者我遗漏了什么

    -

    当您进入横向模式时,会发生另一件奇怪的事情。在横向模式下,当手机围绕z轴倾斜时,不是alpha属性,而是beta属性似乎发生了变化?!要在横向模式下更改alpha属性,您必须围绕其(原始)x轴转动手机,例如,这意味着将手机顶部(现在在横向模式下,手机顶部位于左侧)从您身边移开

    -

    目前我没有安卓或iOS设备可供使用,但至少Chrome桌面浏览器中的仿真器表现完全不同(而且似乎符合W3C标准)

    -

    我在这里放了一个简单的测试脚本:

    (在智能手机上打开它)

    -

    我做错了什么/遗漏了什么吗

    如何纠正这个问题,你有什么想法吗

    =======================


    编辑:刚刚在iPhone上测试过,似乎与windows phone的表现相同…

    回答:他们又这么做了

    现在,大多数CSS和JS已经标准化了PolyFill,大型浏览器和操作系统供应商已经决定实现不同的方式来处理设备定位数据,并将其传递给web开发人员。此外,该标准不是气密的

    我发现:

    这是不同供应商应用程序之间差异的一个非常有用的总和,但(不幸的)不是一个有效的多边形填充。对于我的项目,我正在慢慢填补空白,并期望在几个月内达到一个完整的多边形填充。同时,这里有一个脚本,它将WP IE坐标转换为工作的偏航/俯仰/滚转坐标集

    //[[音高]]

        if ( event.gamma < 0 ) {
    
            normalized.pitch = -90 - event.gamma ;
    
        } else {
    
            normalized.pitch = 90 - event.gamma ;
    
        }
    

    可能是Hi Joffrey的复制品,不幸的是,这不能回答问题。我了解横向模式和纵向模式之间的差异,并且知道如何检测它们之间的差异。我的问题是关于设备报告的实际角度与其在3D空间中的方向的关系。这些角度的报告方式似乎不符合W3C制定的标准,而且在横向模式和纵向模式之间似乎有所不同。
        if ( normalized.pitch > 0 && event.alpha > 180 ) {
    
            normalized.yaw = event.alpha - 180 ;
    
        } else if ( normalized.pitch > 0 && event.alpha < 180 ) {
    
            normalized.yaw = event.alpha + 180;
    
        }
    
        if ( normalized.pitch > 0 ) {
    
            var sign = Math.abs( event.beta ) / event.beta;
    
            normalized.roll = sign * 180 - event.beta ;
    
        }