На холсте ThreeJS с функцией анимированной прокрутки как предотвратить прокрутку выше верхней части страницы?

#javascript #html #canvas #three.js #webgl

Вопрос:

Я внедряю плавную прокрутку в Three.js основываясь на этом руководстве, оно сводится к следующему прослушивателю прокрутки:

 window.addEventListener("wheel", onMouseWheel);

let y = 0;
let pos = 0;

function onMouseWheel(e) {
    y = e.deltaY * 0.003;
    particlesMesh.rotation.y  = 0.0005;
}

 

И следующий рендеринг:

 const clock = new THREE.Clock();

const tick = () => {

// Scroll
    
    pos  = y;
    y *= 0.9;
    camera.position.y = -pos;

// Render

    renderer.render(scene, camera);
    window.requestAnimationFrame(tick);
};

tick()
 

Мой вопрос: как я могу запретить пользователю бесконечно прокручивать страницу вверх/вниз? Я немного не уверен в том, как холст webgl влияет на размеры страницы, но, кажется, это продолжается вечно.

Я попытался добавить условие, разрешающее прокрутку вниз только в том случае, если y > 0, но полоса прокрутки просто застревает вверху.

Есть ли простое решение для предотвращения прокрутки вверх, когда y

Комментарии:

1. Лучшим именем для y было бы dy, потому что оно отражает изменение положения.

Ответ №1:

e.deltaY-это не положение прокрутки; это просто направление прокрутки. e.deltaY является положительным при прокрутке вниз и отрицательным при прокрутке вверх.

Похоже, вы хотите добавить ограничения вокруг камеры.положение.переменная y. Если это так, то добавьте условие перед pos = y:

 if(camera.position.y < 0) {
     ...
}