HTML div 高度在窗口调整大小事件中不断增长

2023-12-06

我有简单的 Three.js 场景(画布),我想在窗口调整大小事件时做出响应(特别是屏幕宽度的变化,保持高度恒定)。 在正常情况下我使用window.innerWidth, window.innerHeight属性设置画布的大小以匹配窗口大小。

不过我想在 html 中嵌入三个场景。 所以我放了三块画布<div id="three-container">.

在下面的代码中,当我调整窗口大小(甚至仅宽度)时,画布的高度不断增长。错误在哪里?我缺少什么?

为了获取 div 容器的大小,我尝试过container.clientWidth, container.offsetWidth and $('#three-container').width()(分别是高度),但对于所有情况,div 的初始高度均为 0,并且在调整大小时不断增长。

完整代码清单:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>default</title>
        <link rel="icon" href="">

    </head>
    <body>
        <div id='three-container' class= "row"></div>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.js"></script>
        <script>

            var renderer, scene, camera, cube;
            var time = 0.0;
            var container = window.document.getElementById( 'three-container' );
            var w = 100; //container.clientWidth; // container.offsetWidth
            var h = 100; //container.clientHeight; //  container.offsetHeight

            init();
            loop();

            function init() {

                camera = new THREE.PerspectiveCamera( 45, w / h, 1, 1000 );

                scene = new THREE.Scene();
                scene.add( camera );

                camera.position.z  = 16;

                renderer = new THREE.WebGLRenderer();
                renderer.setClearColor( 0xa696969 );
                renderer.setPixelRatio( window.devicePixelRatio );
                renderer.setSize( w, h );

                container.appendChild( renderer.domElement );

                var geo = new THREE.BoxGeometry( 5, 5, 5);
                var mat = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true } );
                cube = new THREE.BoxHelper( new THREE.Mesh( geo, mat ), mat.color );
                scene.add( cube );

                window.addEventListener( 'resize', function onWindowResize() {
                    w = container.clientWidth; // container.offsetWidth
                    h = container.clientHeight; // container.offsetHeight

                    console.log( " w : " + w + " h : " + h);
                    renderer.setSize( w, h );
                    camera.aspect = w / h;
                    camera.updateProjectionMatrix();
                }, false );
            }

            function loop() {
                time += 0.01;
                requestAnimationFrame( loop );
                cube.rotation.x = time ;
                cube.rotation.y = time ;
                renderer.render( scene, camera );
            }

        </script>
    </body>
</html>

line-height:0;css-property 可以解决这个问题并保持容器的高度。

#three-container {
  line-height:0;
}

使用这个属性的想法来自这个问题

jsfiddle example

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML div 高度在窗口调整大小事件中不断增长 的相关文章

随机推荐

  • 使用 CSS 根据深度替换颜色

    Problem 我正在制作一个导航 CSS 模块 我希望子菜单具有与其父菜单不同的背景颜色 但是 如果子菜单中有子菜单 我需要该子菜单具有与其父级的父级相同的背景颜色 我知道如果我对允许的子菜单数量设置限制 我可以相当详细地做到这一点 但我
  • Python ImportError:无法导入名称 itemgetter

    Python 2 7 5 default Sep 12 2013 12 43 04 GCC 4 4 7 20120313 Red Hat 4 4 7 3 on linux2 Type help copyright credits or li
  • 添加自定义请求标头适用于 IIS 7.0,但不适用于 Asp.net 开发服务器

    我们正在跟踪响应请求所需的总时间 我们实现了添加的自定义标头 request headers add reqKey key 在我们的 global asax cs 的 Application AcquireRequestState 中使用请
  • 从列表列表中绘制热图

    拥有一个包含变量列表 不同大小 的列表 res 0 01 0 9 0 46 0 64 0 24 0 87 0 99 0 47 0 75 请注意 实际列表每个包含约 3000 个变量 让我们说 x 0 1 2 有没有办法用它制作热图 并将 r
  • IIS 8 无法运行 PHP?

    我的 Windows Server 2012 机器上的 IIS 8 0 遇到权限问题 因此我决定删除并重新添加该角色以尝试修复它 这似乎解决了我的权限问题 但现在我的 PHP 无法工作 尝试访问时出现此错误 php file HTTP 错误
  • Bootstrap 3 - 940px 宽度网格?

    我正在一个新项目中使用 Bootstrap 3 布局最大宽度为 940 像素 桌面等 12 列 60 像素列 20 像素装订线 我已经设置了 container to a max width 940px 但这会出于某种原因使网格关闭 这给了
  • printf 会导致未定义的行为吗? [复制]

    这个问题在这里已经有答案了 int main unsigned int i 12 printf lu i This yields a compiler warning 在 32 位平台上 使用printf与 int 使用 lu结果产生垃圾
  • 2 个 Windows 窗体应用程序之间的通信

    我有 2 个 Windows 窗体应用程序 第一个应用程序与数据库交互 而另一个应用程序旨在与第一个应用程序通信以与数据库交互 那么我如何才能使两个应用程序相互交互呢 我应该使用哪个工具 下面是一个使用 WCF 来通信两个进程的好例子 ht
  • 为什么类对象的大小根据成员的顺序而不同?

    class CHaraICICCC int i char c1 int j char c2 char c3 char c4 class CHaraIICCCC int i int j char c1 char c2 char c3 char
  • 具有奇怪路径的 TopoJSON

    我在 WGS84 中有一个 ESRI shapefile 并将其转换为另一个具有欧洲阿尔伯斯投影 EPSG 102013 的形状文件ogr2ogr ogr2ogr f ESRI Shapefile t srs EPSG 102013 eur
  • 使用 tmap 在形状上弹出

    我用它制作了一张地图tmap包含在一个闪亮的应用程序中使用leaflet 我大致有了我想要的 一个基于 SpatialPolygonsDataFrame 的填充颜色的专题地图 当您单击地图时 会弹出一个包含有关多边形的额外信息的弹出窗口 我
  • 如何在MVVM架构android中的cloud firestore实时更新中包含Source Cache

    在我的应用程序中 我使用 android MVVM 架构 因此为了从云 firestore 检索数据 我使用层 因此我创建了另一个类 Firebase查询实时数据 用于从 firestore 获取结果 因此 通过我的代码 我可以获得实时更新
  • 用于填充 MS Access 中的超链接列的 SQL

    我想 SQL 必须传递 2 个值 即表中显示的值和该值导航到的链接 我希望能有一个指向 SQL 脚本的指针来实现这一点 谢谢 超链接列 字段 的格式为 描述 地址 例如 This is StackOverflow http stackove
  • 在 Windows 任务计划程序中创建/修改任务所需的权限

    我需要从 ASP NET Web 应用程序在 Windows Server 2003 上的 Windows 任务计划程序中创建和修改任务 Web 应用程序运行所在的网络服务无法进行更改 它会出现 System UnauthorizedAcc
  • 数组包含 Google 地图绘图管理器中多边形的纬度和经度

    这是在 Google 地图上添加绘图管理器以供用户绘制多边形 圆形 矩形等的最简单方法 code
  • guzzle ver 6 post 方法不起作用

    正在邮递员中工作 带有 application json 类型的原始格式数据 与guzzle6 url http vm xxxxx com v1 hirejob company name company name last date app
  • 玩:如何在生产代码中创建虚假请求

    FakeRequest来自神器play test并且仅在测试范围内添加到项目中 但我需要创建一种假请求只是为了调用采用隐式方法的方法RequestHeader import play api test implicit val reques
  • 注释属性 Min.value 的值必须是常量表达式

    Eclipse 不断给我错误 The value for annotation attribute Min value must be a constant expression 但我绝对会给注释一个常量 private static fi
  • 我的 R.java 文件中的错误无法解决

    我正在使用 Eclipse ADT 捆绑包 最近更新了我的 Android SDK 工具和 Android SDK 平台工具 然后我尝试创建一个新项目 但我的 R java 文件中不断出现错误 这似乎微不足道 但我仍然不明白它是如何保持的显
  • HTML div 高度在窗口调整大小事件中不断增长

    我有简单的 Three js 场景 画布 我想在窗口调整大小事件时做出响应 特别是屏幕宽度的变化 保持高度恒定 在正常情况下我使用window innerWidth window innerHeight属性设置画布的大小以匹配窗口大小 不过