You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

drei库<ScrollControls>与<Html>位移异常求助(OrbitControls禁用缩放)

问题:ScrollControls导致Html标签滚动时错误位移

添加<ScrollControls>后,即使未操控相机,原本应固定在3D场景特定位置、随相机移动的<Html>标签,在滚动时会出现错误位移。期望<Html>标签仅相对相机位移,不随<ScrollControls>滚动而移动。

解决方案

问题根源在于<Html>被嵌套在<ScrollControls>内部,会继承其滚动变换逻辑。只需调整组件层级并修正样式即可解决:

  • 将<Html>移出<ScrollControls>的子节点范围,避免受到滚动控制的变换影响
  • 移除<Html>样式中的position: fixed,该样式会干扰Three.js的相机坐标定位逻辑,drei的<Html>组件本身已通过3D坐标实现定位

修改后的代码

import { Html, ScrollControls, OrbitControls } from "@react-three/drei";

export default function App() {
  return (
    <>
      <OrbitControls enableZoom={false} />
      {/* Html组件移出ScrollControls,独立跟随相机 */}
      <Html
        position={[-8.5, 12.9, 1.43]}
        distanceFactor={4}
        style={{
          height: 784,
          width: 1698,
          backgroundColor: "#03b6fc",
          borderRadius: "60px"
        }}
        transform
      ></Html>
      <ScrollControls>
        <mesh rotation-x={Math.PI * 1.5} position={[0, -2, 0]}>
          <planeGeometry args={[100, 100, 1, 1]} />
          <meshBasicMaterial color="#00ff00" />
        </mesh>
      </ScrollControls>
    </>
  );
}

说明

  • 保留transform属性,确保<Html>能正确映射3D空间位置并跟随相机视角变化
  • 原依赖版本(@react-three/drei@9.83.9、@react-three/fiber@8.14.2等)可正常运行此修改

内容的提问来源于stack exchange,提问作者PadjeX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:53:10