【记录】innerHeight?clientHeight?offsetHeight?scrollTop?screenTop?.....一堆高度傻傻分不清

1、window.screen

window.screen.height

  • 用户屏幕的高度。

window.screen.availHeight

  • 浏览器窗口在屏幕上可占用的垂直空间,即最大高度。

不会随浏览器窗口变化,只与用户屏幕尺寸有关。

2、window

window.innerHeight

  • 浏览器窗口的视口的高度(包括滚动条)。
  • 只读。

window.outerHeight

  • 整个浏览器窗口的高度(包括地址栏啥的55667788)。
  • 只读。

随着浏览器窗口变化。
不支持IE9及以下。

3、element

element.clientHeight

  • 对于没有定义CSS的元素或者内联元素,为0;否则为元素可见高度(注意是可见高度,如果元素没有滚动条,则等于padding+content;如果元素有滚动条,则等于height)。
  • 只读。

element.clientTop

  • 元素顶部边框(border-top)的高度。
  • 只读。

element.offsetHeight

  • 元素加了border的可见高度(如果元素没有滚动条,则等于border+padding+content;如果元素有滚动条,则等于border+height)。
  • 只读。

element.offsetTop

  • 当前元素相对于其 offsetParent 元素(最近的开启定位的祖先元素,无则为根元素)的顶部内边距的距离。
  • 只读。

element.scrollHeight

  • 元素的padding+content高度。
  • 只读。

element.scrollTop

  • 这个元素的内容顶部(卷起来的)到它的视口可见内容(的顶部)的距离的度量。当一个元素的内容没有产生垂直方向的滚动条,那么它的 scrollTop 值为0
  • 只读。

4、document.body

  • html节点中的body节点。

5、document.documentElement

  • 根节点,即html节点。

各个浏览器之间对于body和documentElement下的三个height有不同的见解。
参考
https://juejin.cn/post/6844903694442446861#comment
https://www.cnblogs.com/libin-1/p/5964776.html
https://qinzhen001.github.io/2017/10/27/clientHeight-scrollHeight-offsetHeight-myblog/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用ammo.js来模拟滑坡效果。Ammo.js是一个用于物理引擎的JavaScript库,可以在Web上实现高性能的物理模拟。 以下是一个简单的滑坡模拟的例子,其中使用了Ammo.js库: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Ammo.js Slider Example</title> <script src="ammo.js"></script> </head> <body> <canvas id="canvas"></canvas> <script> var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); var physicsWorld, scene, camera, renderer, rigidBodies = [], transformAux1 = new Ammo.btTransform(); var clock = new THREE.Clock(); init(); animate(); function init() { // 初始化物理引擎 initializePhysics(); // 创建地面 createGround(); // 创建滑坡 createSlider(); // 创建相机 createCamera(); // 创建渲染器 createRenderer(); // 将渲染器添加到HTML页面中 document.body.appendChild(renderer.domElement); } function initializePhysics() { // 初始化物理引擎 var collisionConfiguration = new Ammo.btDefaultCollisionConfiguration(), dispatcher = new Ammo.btCollisionDispatcher(collisionConfiguration), overlappingPairCache = new Ammo.btDbvtBroadphase(), solver = new Ammo.btSequentialImpulseConstraintSolver(); physicsWorld = new Ammo.btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration); physicsWorld.setGravity(new Ammo.btVector3(0, -10, 0)); } function createGround() { // 创建地面 var groundShape = new Ammo.btBoxShape(new Ammo.btVector3(50, 1, 50)); createRigidBody(0, new Ammo.btTransform(), groundShape, new THREE.MeshPhongMaterial({ color: 0xffffff })); } function createSlider() { // 创建滑坡 var sliderLength = 10, sliderThickness = 0.5, sliderHeight = 2; // 创建滑坡形状 var sliderShape = new Ammo.btBoxShape(new Ammo.btVector3(sliderLength, sliderThickness, sliderHeight)); // 创建滑坡刚体 var sliderTransform = new Ammo.btTransform(); sliderTransform.setIdentity(); sliderTransform.setOrigin(new Ammo.btVector3(0, 5, 0)); var sliderBody = createRigidBody(1, sliderTransform, sliderShape, new THREE.MeshPhongMaterial({ color: 0xff0000 })); sliderBody.setFriction(0.5); rigidBodies.push(sliderBody); } function createRigidBody(mass, startTransform, shape, material) { // 创建刚体 var localInertia = new Ammo.btVector3(0, 0, 0); shape.calculateLocalInertia(mass, localInertia); var motionState = new Ammo.btDefaultMotionState(startTransform); var rigidBodyInfo = new Ammo.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia); var body = new Ammo.btRigidBody(rigidBodyInfo); body.setRestitution(0.5); body.setFriction(0.5); body.setActivationState(4); physicsWorld.addRigidBody(body); // 创建对应的网格模型 var mesh = new THREE.Mesh(shape2Mesh(shape), material); scene.add(mesh); // 将刚体和网格模型关联起来 body.mesh = mesh; return body; } function createCamera() { // 创建相机 camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.2, 2000); camera.position.set(0, 20, 30); camera.lookAt(new THREE.Vector3(0, 0, 0)); } function createRenderer() { // 创建渲染器 renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true }); renderer.setClearColor(0xffffff, 1); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMap.enabled = true; } function animate() { requestAnimationFrame(animate); // 更新物理引擎 physicsWorld.stepSimulation(clock.getDelta(), 10); // 更新网格模型的位置 for (var i = 0; i < rigidBodies.length; i++) { var body = rigidBodies[i]; var motionState = body.getMotionState(); if (motionState) { motionState.getWorldTransform(transformAux1); var position = transformAux1.getOrigin(); var quaternion = transformAux1.getRotation(); body.mesh.position.set(position.x(), position.y(), position.z()); body.mesh.quaternion.set(quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w()); } } // 渲染场景 renderer.render(scene, camera); } function shape2Mesh(shape) { var geometry = null; var material = new THREE.MeshPhongMaterial({ color: 0xffffff }); switch (shape.getShapeType()) { case Ammo.CONSTANTS.BOX_SHAPE_PROXYTYPE: geometry = new THREE.BoxGeometry(shape.getHalfExtentsWithMargin().x() * 2, shape.getHalfExtentsWithMargin().y() * 2, shape.getHalfExtentsWithMargin().z() * 2); break; case Ammo.CONSTANTS.SPHERE_SHAPE_PROXYTYPE: geometry = new THREE.SphereGeometry(shape.getRadius(), 32, 32); break; case Ammo.CONSTANTS.CYLINDER_SHAPE_PROXYTYPE: geometry = new THREE.CylinderGeometry(shape.getRadiusTop(), shape.getRadiusBottom(), shape.getHeight(), 32); break; case Ammo.CONSTANTS.CAPSULE_SHAPE_PROXYTYPE: var capsuleShape = shape; var radius = capsuleShape.getRadius(); var height = capsuleShape.getHeight(); var segments = 32; var geometry = new THREE.CylinderGeometry(radius, radius, height, segments); var capGeometry = new THREE.SphereGeometry(radius, segments, segments / 2); var cap1 = new THREE.Mesh(capGeometry); var cap2 = new THREE.Mesh(capGeometry); cap1.position.set(0, height / 2, 0); cap2.position.set(0, -height / 2, 0); cap1.castShadow = true; cap2.castShadow = true; geometry.merge(cap1.geometry, cap1.matrix); geometry.merge(cap2.geometry, cap2.matrix); break; case Ammo.CONSTANTS.TRIANGLE_MESH_SHAPE_PROXYTYPE: var mesh = new THREE.Geometry(); var shape = shape; for (var i = 0; i < shape.getNumVertices(); i++) { var vertex = shape.getVertex(i); mesh.vertices.push(new THREE.Vector3(vertex.x(), vertex.y(), vertex.z())); } for (var i = 0; i < shape.getNumTriangles(); i++) { var triangle = shape.getTriangle(i); mesh.faces.push(new THREE.Face3(triangle[0], triangle[1], triangle[2])); } mesh.computeBoundingBox(); mesh.computeBoundingSphere(); geometry = mesh; break; default: break; } if (geometry !== null) { geometry.computeBoundingBox(); geometry.computeBoundingSphere(); var mesh = new THREE.Mesh(geometry, material); mesh.castShadow = true; mesh.receiveShadow = true; return mesh; } } </script> </body> </html> ``` 这个例子创建了一个地面和一个滑坡,使用Ammo.js模拟了滑坡的物理效果。你可以修改这个例子来满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值