我在一个 iOS 网络应用程序上使用一些 JavaScript 代码有点超出我的体重。
我正在做的是使用以下方法将一层移动到另一层之上:
- 陀螺仪和加速度计数据和
- 触摸输入。
这意味着我有两个 javascript 都试图移动相同的东西。这效果不太好,从当前版本在 iOS 设备上查看时可以看到(提示:透明度是用右边的按钮打开的,不,它不能用鼠标向右移动除非您使用带有陀螺仪的 iOS 设备,否则不会移动)。
所以我已经完成了艰难的工作,但我坚持基于我对 JavaScript 的新手(ish)水平的预期是一个陷阱。
当触摸移动代码处于活动状态时,如何停止陀螺移动代码?另外我想我需要更新 x+y 值,这样一旦触摸移动结束,透明度就不会跳转位置。
我尝试在代码顶部添加 if, else 语句,但这似乎破坏了整个过程。
顺便说一句,感谢 StackOverflow 上的每个人,之前的 Q 和 As 对我取得了这么大的帮助。
帮助将不胜感激。
斯特凡
到目前为止,这是我的代码,它存在于 body 元素中......
var x = 0, y = 0,
vx = 0, vy = 0,
ax = 0, ay = 0;
var transp = document.getElementById("transp");
if (window.DeviceMotionEvent != undefined) {
window.ondevicemotion = function(e) {
ax = event.accelerationIncludingGravity.x * 5;
ay = event.accelerationIncludingGravity.y * 5 + 19;
document.getElementById("accelerationX").innerHTML = e.accelerationIncludingGravity.x;
document.getElementById("accelerationY").innerHTML = e.accelerationIncludingGravity.y;
document.getElementById("accelerationZ").innerHTML = e.accelerationIncludingGravity.z;
if ( e.rotationRate ) {
document.getElementById("rotationAlpha").innerHTML = e.rotationRate.alpha;
document.getElementById("rotationBeta").innerHTML = e.rotationRate.beta;
document.getElementById("rotationGamma").innerHTML = e.rotationRate.gamma;
}
}
setInterval( function() {
var landscapeOrientation = window.innerWidth/window.innerHeight > 1;
if ( landscapeOrientation) {
vx = vx + ay;
vy = vy + ax;
} else {
vy = vy - ay;
vx = vx + ax;
}
vx = vx * 0.98;
vy = vy * 0.98;
y = parseInt(y + vy / 70);
x = parseInt(x + vx / 70);
boundingBoxCheck();
transp.style.top = y + "px";
transp.style.left = x + "px";
}, 25);
}
function boundingBoxCheck(){
if (x<-310) { x = -310; vx = -vx; }
if (y<-300) { y = -300; vy = -vy; }
if (x>document.documentElement.clientWidth) { x = document.documentElement.clientWidth; vx = -vx; }
if (y>document.documentElement.clientHeight+400) { y = document.documentElement.clientHeight+400; vy = -vy; }
}
$.fn.moveable = function() {
var offset = null;
var start = function(e) {
var orig = e.originalEvent;
var pos = $(this).position();
offset = {
x: orig.changedTouches[0].pageX - pos.left,
y: orig.changedTouches[0].pageY - pos.top
};
};
var moveMe = function(e) {
e.preventDefault();
var orig = e.originalEvent;
$(this).css({
top: orig.changedTouches[0].pageY - offset.y,
left: orig.changedTouches[0].pageX - offset.x
});
};
this.bind("touchstart", start);
this.bind("touchmove", moveMe);
};
$(".moveable").moveable();