Problem med mushastighet i Javascript.
Hejsan! Jag har suttit några timmar och gnuggat idiotknölen över ett problem jag har med Javascript. Jag försöker räkna ut vilken hastighet musen har när man släpper musknappen.
Sättet som jag gör det på nu är att när eventet "mousemove" avbryts när man släpper musknappen, alldeles efter kollar man var musen befinner sig och subtraherar den föregående positionen med den nya.
Det fungerar alldeles utmärkt i Chrome, men Firefox verkar ha lite problem med det och båda får samma värde.
Jag petar in lite kod här nedanför ifall någon är intresserad.
All hjälp uppskattas!
document.addEventListener("mouseup", function(ev) {
var rotationSpeedX = ev.screenX - lastX;
var rotationSpeedY = ev.screenY - lastY;
if (mouseMoved == 1) {
interval1 = setInterval(function(late) {
if (rotationSpeedX > 0) {
self.RenderManager.currentRotationX = self.RenderManager.currentRotationX + rotationSpeedX;
if (rotationSpeedX <= 0)
clearInterval(interval1);
rotationSpeedX = rotationSpeedX + -0.2;
rotationSpeedX = rotationSpeedX * 0.95;
}
if (rotationSpeedX < 0) {
self.RenderManager.currentRotationX = self.RenderManager.currentRotationX + rotationSpeedX;
if (rotationSpeedX >= 0)
clearInterval(interval1);
rotationSpeedX = rotationSpeedX + 0.2;
rotationSpeedX = rotationSpeedX * 0.95;
}
self.RenderManager.Frame();
}, 20);
interval2 = setInterval(function(late) {
if (rotationSpeedY > 0) {
self.RenderManager.currentRotationY = self.RenderManager.currentRotationY + rotationSpeedY;
if (rotationSpeedY <= 0)
clearInterval(interval2);
rotationSpeedY = rotationSpeedY + -0.2;
rotationSpeedY = rotationSpeedY * 0.95;
}
if (rotationSpeedY < 0) {
self.RenderManager.currentRotationY = self.RenderManager.currentRotationY + rotationSpeedY;
if (rotationSpeedY >= 0)
clearInterval(interval2);
rotationSpeedY = rotationSpeedY + 0.2;
rotationSpeedY = rotationSpeedY * 0.95;
}
self.RenderManager.Frame();
}, 20);
}
}, false);
document.addEventListener("mousemove", function(ev) {
var deltaX = ev.screenX - lastX;
deltaX = deltaX * - 1;
lastX = ev.screenX;
self.RenderManager.currentRotationX -= deltaX;
var deltaY = ev.screenY - lastY;
deltaY = deltaY * - 1;
lastY = ev.screenY;
self.RenderManager.currentRotationY -= deltaY;
while (self.RenderManager.currentRotationX < 0)
self.RenderManager.currentRotationX += 360;
if (self.RenderManager.currentRotationX >= 360)
self.RenderManager.currentRotationX = self.RenderManager.currentRotationX % 360;
while (self.RenderManager.currentRotationY < 0)
self.RenderManager.currentRotationY += 360;
if (self.RenderManager.currentRotationY >= 360)
self.RenderManager.currentRotationY = self.RenderManager.currentRotationY % 360;
self.RenderManager.Frame();
return true;
}, false);
Dur ru - dum.