position()与offset()区别

本文深入解析jQuery中的position()和offset()方法的使用,通过实例展示两者获取元素位置时的不同之处,包括相对位置的计算方式及在不同浏览器中的表现差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点在于位置的相对点不同。

可以看看下边的图:

position()同offset()的区别

从图中我们可以大体看出两者的区别。position()获取相对于它最近的具有相对位置(position:relative)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离。

offset()始终返回相对于浏览器文档的距离,它会忽略外层元素。

下边看个简单的例子,这里外层的div元素(position:relative)仅一个:

<div id="outer" style="width:200px;position:relative;left:100px;">
    <div id="inner" style="position:absolute;left:50px;top:60px;">           
    </div>
</div>
//获取相对于最近的父级(position:relative)的位置
var vposition = $("#inner").position();
alert(vposition.left);   //输出:50
alert(vposition.top);    //输出:60

var voffset = $("#inner").offset();
alert(voffset.left);   //输出:$("#outer").offset().left+50
alert(voffset.top);    //输出:$("#outer").offset().top+60

在不同浏览器中,offset()得到的相对于浏览器的位置不同,相信你看了上边相应的注释,已经掌握了position()同offset()方法的区别。

作者:jQuery学习
除非注明,jQuery学习网文章均为原创,转载时必须以链接形式标明本文地址。
本文地址:http://www.jquery001.com/position()-offset().html

### 世界坐标偏移的概念 在图形编程和游戏开发中,`World Position Offset` 是一种用于修改物体顶点位置的技术。它允许开发者通过计算改变模型的世界空间中的位置[^1]。这种技术通常被用来创建动态效果,比如地形变形、波浪起伏或者角色动画。 具体来说,在渲染管线中,`World Position Offset` 可以作为着色器的一部分来实现。这通常是通过顶点着色器(Vertex Shader)完成的,其中原始顶点的位置会被调整为新的世界空间位置。这种方法可以极大地增强视觉效果的真实感和复杂度。 以下是其实现的一个基本流程: 1. **输入数据准备**:将几何体的数据传递到 GPU 中,这些数据可能包括顶点位置、法线以及其他属性。 2. **应用变换矩阵**:使用对象的局部变换矩阵将其从模型空间转换至世界空间。 3. **执行偏移操作**:基于特定逻辑(如噪声函数或其他算法),对顶点的世界坐标进行偏移处理。 4. **后续变换**:继续执行视图投影变换并最终呈现图像。 下面是一个简单的 HLSL 实现示例,展示如何利用 `WorldPositionOffset` 修改顶点位置: ```hlsl float4x4 WorldMatrix : register(c0); float4x4 ViewProjectionMatrix : register(c1); // 噪声纹理采样器 Texture2D NoiseTexture; SamplerState LinearSampler; struct VS_INPUT { float4 Pos : POSITION; // 输入顶点位置 (模型空间) }; struct PS_INPUT { float4 Pos : SV_POSITION; // 输出裁剪空间位置 }; PS_INPUT main(VS_INPUT input) { PS_INPUT output = (PS_INPUT)0; // 将顶点从模型空间转到世界空间 float4 worldPos = mul(input.Pos, WorldMatrix); // 使用噪声纹理生成高度偏移量 float noiseValue = NoiseTexture.Sample(LinearSampler, worldPos.xz / 10).r * 5.f; worldPos.y += noiseValue; // 转换到裁剪空间 output.Pos = mul(worldPos, ViewProjectionMatrix); return output; } ``` 上述代码片段展示了如何通过采样一张二维噪声贴图来决定每个顶点的高度变化,并以此为基础增加额外的艺术化控制能力[^2]。 #### 注意事项 - 需要特别注意性能优化问题,因为复杂的运算可能会显著降低帧率。 - 如果涉及到大规模场景,则应考虑分层细节级别(LOD)、剔除等策略减少不必要的计算负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值