你需要做三件事:
- 正如你所说,摆脱 OrbitControl,
- 订阅文档滚动事件,
- 更新每个文档滚动的摄像头。
我假设您将threejs画布放置在背景上没有问题,我在回答中提到这部分只是为了完整。
演示:https://jsfiddle.net/mmalex/pgnz4vms/
JS代码:
function updateCamera(ev) {
let div1 = document.getElementById("div1");
camera.position.x = 10 - window.scrollY / 500.0;
camera.position.z = 10 - window.scrollY / 500.0;
}
window.addEventListener("scroll", updateCamera);
HTML 代码:
<canvas id="viewport"></canvas>
<div id="div1" class="page-wrapper" >
<h3>
Three.js: Change camera position on page scroll
</h3>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris quis vulputate neque. Proin ullamcorper nisi libero. Praesent ac tincidunt est. Pellentesque convallis tincidunt felis, non dignissim sapien dignissim nec. Donec luctus ligula ligula, ut
consectetur massa vulputate ac. Donec mattis feugiat iaculis. Fusce id leo at lectus ornare tempor. Suspendisse potenti. Praesent purus nisi, accumsan eu facilisis et, convallis et tellus. Quisque vestibulum lectus lectus, a aliquet ligula malesuada
vel. Nullam vestibulum ut sapien consectetur luctus. Aenean augue lacus, sodales sit amet tincidunt vitae, facilisis in mi. Nulla facilisi.
</p>
</div>
CSS 代码:
body {
overflow-x: hidden;
overflow-y: scroll;
padding: 0;
margin: 0;
}
#viewport {
position: fixed;
margin: 0;
padding: 0;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.page-wrapper {
padding: 0px;
margin: 12px 48px;
position: absolute;
left: 0;
top: 0;
width: calc(100% - 2*48px);
word-wrap: break-word;
}