js的几何属性




 offsetWidth获取对象宽度

offsetHeight:获取对象高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置

简单的例子:就是

<div id="container" style="position:absolute;width:200px;height:200px">

   <div id="content" style="position:absolute;width:200px;height:200px">></div>

</div>

<script>

var element =documentById("content");

alert(element.style.width)//是可以获得width,但是是不包括的border的,此外css样式必须是内嵌的

alert(element.offsetHeight);//这样就可以获得所需要的宽度,即使是一个img对象

//如果没有内容及width等属性,offsetWidth为browser的宽度,offsetHeight为0

</script>

 

复杂例子

下面考虑到offsetTop,他主要是针对包含的对象,所以有时候我们就一直往上考虑元素在文本坐标中的位置

  <style type="text/css">
  body{
     margin:0px;
    padding:0px;
  }
     #test{
    position:absolute;
    width:200px;
    height:200px;
    background:#0000FF;
    left:100px;
    top:80px;
  }
  </style>
  <script language="javascript" type="text/javascript">
      var eventUtil = {};
   eventUtil.eventHander = function(eventType,element,func){
         if(element.addEventListener){
      element.addEventListener(eventType,func,false);
   }else if(element.attachEvent){
      element.attachEvent("on"+eventType,func);
   }else{
   element["on"+eventType] = func;
   }
   }
     eventUtil.removeEventHander = function(eventType,element,func){
         if(element.addEventListener){
      element.removeEventListener(eventType,func,false);
   }else if(element.attachEvent){
      element.detachEvent("on"+eventType,func);
   }else{
   element["on"+eventType] = null;
   }
   }
   function funcLoad(){
        var d =document.getElementById("test");
  alert(getOffSetTop(d));
 }
 function getOffSetTop(obj){
    var  top = 0;
     while(obj){
     top += obj.offsetTop;
     obj = obj.offsetParent;
     alert(obj.nodeName)
  }
     return top ;
 }
 //这就是offsetTop是相对于最近的包装元素,所以可以最后一直循环才行
 //offsetWidth是获得当前元素的宽,包括图像,当匀速没有内容,无边框,width,height时候,默认的为browser的宽
 //
    eventUtil.eventHander("load",window,funcLoad);
  </script>
</head>
<body>
<div style="position:absolute;left:200px;top:100px">
   dsadsadsa<br/>
   asdasdsa<br/>
   dsadsadsadsadsadsa<br/>
   <div id="test">
   </div>
 </div>

下面一个滚动,当然元素要有overflow属性了,auto,hidden,visible,scroll,滚动相对于body标签,我就直接给例子,滚动的实现

scrollHeight: 获取对象的滚动高度。
scrollWidth:获取对象的滚动宽度

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
 例子一:

<style type="text/css">
   #stu{
   position:absolute;
  top:100px;
  left:100px;
   }
   //fixed相当对于html元素,不会变
   //position是相对于body的,所以这个会产生滚动
 </style>
  <script>
  function test(){
       var t =document.getElementById("stu");
    if(document.body.clientWidth){
          t.style.top  = 100+document.body.scrollTop+"px";
          t.style.left =100+document.body.scrollLeft+"px";
       }else if(document.documentElement&&document.documentElement.clientWidth){
      t.style.top  = 100+document.documentElement.scrollTop+"px";
          t.style.left =100+document.documentElement.scrollLeft+"px";
    }
    }
  </script>
</head>

<body οnscrοll="test()">
  <form>
      <textarea cols="300" rows="300"  name="text"></textarea>
      <img src="语句.jpg" id="stu"/></form>
  </form>

</body>
</html>

保证元素在屏幕的固定位置,不过最好position:fixed,全面一种是拖动刷新

例子二,无间隙滚动 

<style type="text/css">
body{
   padding:0;
   margin :0;
 }
   #container{
    border:1px solid red;
   width:200px;
   height:200px;
   overflow:hidden;
   }
</style>
</head>
<body>
<div id="container">
  <div id="content1">
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
     asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
    asddddddddddddddddddddd<br/>
  </div>
  <br/>
  <div  id="content2">
  </div>
</div>
<script>
      var moveElement =document.getElementById("container");
   var element1 =document.getElementById("content1");
   var element2=document.getElementById("content2");
   element2.innerHTML = element1.innerHTML
    function move(){
       if(element2.offsetTop -moveElement.scrollTop<=0){
          moveElement.scrollTop -=element2.offsetTop;
    }
       moveElement.scrollTop++;
    // document.title =  moveElement.scrollTop+"新的content的高度"+  element2.offsetTop+"新的"+element1.offsetTop;
  }
   setInterval("move()",30);
</script>
</body>
</html>


event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
以上主要指IE之中,FireFox差异如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

 

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;

网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);

网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;

网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;

网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;

屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;

屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;


### 回答1: Three.js r147 中已不能直接访问几何体的 vertices 属性,需要通过其他方式来获取。例如,可以使用几何体的attributes属性或使用一些插件,如 THREE.GeometryUtils.merge。请根据您的需求选择适当的方法。 ### 回答2: 在three.js的r147版本之前,可以直接使用`geometry.vertices`属性来获取几何体的顶点信息。但自从r147版本开始,Three.js几何体的数据结构进行了重构,不再直接暴露`vertices`属性。 在现在的版本中,要获取几何体的顶点信息,可以通过以下步骤来实现: 1. 首先,创建一个几何体对象,例如创建一个方形的平面: ```javascript const geometry = new THREE.PlaneGeometry(10, 10, 1, 1); ``` 2. 然后,通过调用`geometry.attributes.position`获取顶点的`BufferAttribute`。`BufferAttribute`是一个包含几何体顶点信息的缓冲区对象。 ```javascript const positions = geometry.attributes.position.array; ``` 3. 最后,根据顶点的数量,可以通过`positions`数组来访问每个顶点的坐标。假设顶点集合中每个顶点拥有3个坐标分量(x、y、z),可以通过以下方式访问第0个顶点的坐标: ```javascript const x = positions[0]; const y = positions[1]; const z = positions[2]; ``` 通过以上步骤,可以获取几何体的顶点信息,以便进行后续的计算或修改。 需要注意的是,不同版本的Three.js可能有不同的用法,如果你使用的是r147版本,那么以上的步骤应该能够满足你的需求。如果你使用的是更新版本的Three.js,建议参考相应版本的官方文档或示例代码,查找正确的方法来获取几何体的顶点信息。 ### 回答3: 在three.js版本r147之前,我们可以通过直接访问几何体的vertices属性来获取其顶点信息。但从r147版本开始,three.js不再直接暴露几何体的vertices属性。 这是因为在three.js中,几何体(Geometry)对象和缓冲几何体(BufferGeometry)对象分别用于表示顶点数据。r147版本之前的几何体对象使用一个数组来存储顶点的位置信息,而在r147版本之后,three.js推荐使用缓冲几何体来表示顶点数据。 新的缓冲几何体通过使用属性(Attribute)来定义顶点数据。属性类似于顶点数组,但提供了更灵活的数据访问方式和更高效的渲染性能。 要获取几何体的顶点信息,我们需要使用几何体对象的相关方法。例如,可以通过调用几何体对象的getAttribute方法来获取缓冲几何体中的属性对象,然后通过属性对象的array属性访问顶点数据。 具体而言,可以使用以下代码获取缓冲几何体对象的顶点信息: ```javascript // geometry是几何体对象 const bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry); const positionAttribute = bufferGeometry.getAttribute('position'); const vertices = positionAttribute.array; ``` 上述代码中,我们首先将几何体对象转换为缓冲几何体对象,然后通过getAttribute方法获取顶点属性对象,最后通过属性对象的array属性获取顶点数据。 所以,在r147版本后,我们不能直接访问几何体的vertices属性,但可以通过转换为缓冲几何体对象,并使用相关方法来获取顶点信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值