refactor: Optimize terrain rendering and zooming performance
This commit is contained in:
15
events.js
15
events.js
@@ -38,17 +38,22 @@ function setupPanZoom() {
|
||||
|
||||
canvas.addEventListener('wheel', (e) => {
|
||||
e.preventDefault();
|
||||
let zoomSpeed = 0.001;
|
||||
// Adjust zoom speed based on current scale for smoother zooming
|
||||
let zoomSpeed = 0.001 * (scale < 1 ? 0.5 : 1);
|
||||
let delta = e.deltaY * zoomSpeed;
|
||||
let oldScale = scale;
|
||||
scale -= delta;
|
||||
|
||||
// Limit scale range
|
||||
if(scale < 0.1) scale = 0.1;
|
||||
if(scale > 5) scale = 5;
|
||||
|
||||
let mouseX = e.clientX - (canvas.width/2 + offsetX);
|
||||
let mouseY = e.clientY - (canvas.height/2 + offsetY);
|
||||
offsetX -= mouseX * (scale - oldScale);
|
||||
offsetY -= mouseY * (scale - oldScale);
|
||||
// Zoom toward mouse position
|
||||
const rect = canvas.getBoundingClientRect();
|
||||
let mouseX = e.clientX - rect.left - (canvas.width/2 + offsetX);
|
||||
let mouseY = e.clientY - rect.top - (canvas.height/2 + offsetY);
|
||||
offsetX -= mouseX * (scale / oldScale - 1);
|
||||
offsetY -= mouseY * (scale / oldScale - 1);
|
||||
}, {passive: false});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user