繁体   English   中英

检测初始设备方向值

[英]Detect initial device orientation values

我正在尝试手动创建各种视差效果,到目前为止,这是我的JavaScript:

var bottom = document.getElementById("bottom");
var top = document.getElementById("top");

window.addEventListener("deviceorientation", function(e) {
  var gamma = e.gamma;
  var beta = e.beta;
  $(bottom).css('left',(gamma/2)+'px').css('top',(beta/2)+'px');
  $(top).css('left',(gamma)+'px').css('top',(beta)+'px');

});

到目前为止,它的运行效果很好,并且我具有想要的效果,但是设备的起始位置并不是我想要的。 当前alpha, beta, and gamma如果设备在桌子上放平,则alpha, beta, and gamma值仅为0,0,0 我想做的是,当您加载页面时,该位置取为0,0,0

例如,如果我用手中的手机阅读,那么我的手机当然已经倾斜了,并且我想在加载页面时将此起始位置设为0,0,0

因此,将其放入某种伪代码中,这是我想要实现的目标:

gammaOnLoad and betaOnLoad = initial device orientation

gammaCurrent and betaCurrent = e.gamma and e.beta (from event listener)

gammaDifference and betaDifference = Math.abs(gammaOnLoad - gammaCurrent)

$(elem).css('left', gammaDifference + 'px').css('top', betaDifference + 'px');

因此,从本质上讲,您在加载页面时会接受这些值,并将其用作起点(即0)。 这意味着无论您的手机处于什么角度,当您加载页面时,图像将始终看起来正常,并从那里开始视差效果。

我想和你做同样的事情。 这是非常基本的,但似乎可行:

    $(document).ready(function() {

        var origLR, origFB;

        function setOrigin(eventData) {

            origLR = eventData.gamma;

            origFB = eventData.beta;

        }

        if (window.DeviceOrientationEvent) {

            window.addEventListener('deviceorientation', setOrigin, false);

            setTimeout(function() {

                window.removeEventListener('deviceorientation', setOrigin, false);

                window.addEventListener('deviceorientation', function(eventData) {

                    var tiltLR = eventData.gamma,

                    tiltFB = eventData.beta;

                    tiltLR = (origLR - tiltLR);
                    tiltFB = (origFB - tiltFB);

                    deviceOrientationHandler(tiltLR, tiltFB);

                }, false);
            }, 100);

        };

        function deviceOrientationHandler(tiltLR, tiltFB) {

            $('.bottom').css('transform','translateX(' + (tiltLR/5) + 'px) translateY(' + (tiltFB/5) + 'px)');
            $('.top').css('transform','translateX(' + (tiltLR/2.5) + 'px) translateY(' + (tiltFB/2.5) + 'px)');

        }
    });

我添加了一个100ms的事件侦听器,用于设置初始设备方向值,然后将其删除,并用一个可以计算初始值和当前值之间的差值的事件侦听器代替。

这可能会更有效率,我不是一个特别有经验的程序员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM