[英]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.