JavaScript—— scroolleft----offsetleft 系列的含义以及浏览器兼容问题

clientWidth:获取对象的内容可视区域的宽度,即clientWidth=width+padding,不包括滚动条。

clientHeight:获取对象的内容可视区域的高度,即clientHeight=height+padding,不包括滚动条。

scrollWidth:获取对象内容的实际宽度,即对象的滚动宽度。

scrollHeight:获取对象内容的实际高度,即对象的滚动高度。

offsetWidth:获取对象的宽度,即offsetWidth=width+padding+scrollbar(滚动条)+border。也可以写成offsetWidth=clientWidth+scrollbar(滚动条)+border。

offsetHeight:获取对象的宽度,即offsetHeight=height+padding+scrollbar(滚动条)+border。也可以写成offsetHeight=clientHeight+scrollbar(滚动条)+border。

clientTop:获取对象的上边框的宽度。

clientLeft:获取对象的左边框的宽度。

scrollTop:设置或获取对象最顶端和对象内容的最顶端之间的距离。

scrollLeft:设置或获取对象最左端和对象内容的最左端之间的距离。

offsetTop:获取对象相对于版面或由offsetParent属性指定的父坐标的顶部位置。

offsetLeft:获取对象相对于版面或由offsetParent属性指定的父坐标的左侧位置。

offsetParent:指的是最近的定位祖先元素。如果没有祖先元素是定位的话,会指向body元素。

td的offsetParent是TABLE,不管table是否有定位属性。td里面的元素的offsetParent为第一个定位的parents元素,如果没有定位元素呢,分为三种:

  1. 如果该元素没有定位时:TD
  2. 如果该元素有定位,table都没有定位的话,IE6中=HTML,FF,IE8=BODY
  3. 如果该元素和table都定位的话:TABLE

在IE6和IE7中对offsetParent解释有个小bug,当祖先元素都不是定位元素且本身是定位元素的时候返回document.documentElement,其他情况返回document.body!!

 

offsetTop、offsetLeft

(1)当对象的offsetParent属性指向的是body时,offsetLeft和offsetTop指的是对象的边框(不包括边框)到页面边缘的距离。在FireFox中,会减去body的边框的宽度。

(2)当对象的offsetParent属性指向的是最近的定位祖先元素时,offsetLeft和offsetTop指的是对象的边框(不包括边框)到最近的定位祖先元素的边框(不包括边框)的距离。在IE中,会将最近的定位祖先元素的边框宽度算在内。

示例代码:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>鬼眼邪神的博客</title>
        <meta name="author" content="鬼眼邪神"/>
        <meta name="description" content="鬼眼邪神的博客,http://cyg7561.blog.163.com/"/>
        <style>
            * {
                margin:0;
                padding:0;
            }
            body {
                margin-left:30px;
                border:5px solid #000;
                background:yellow;
                height:350px;
            }
            .d {
                float:left;
                position:relative;
                margin:20px;
                padding:20px;                
                width:200px;
                height:200px;
                border:20px solid #000;
                background:red;
                overflow:auto;
            }
            .con {
                float:left;
                width:400px;
                height:80px;
                margin-left:25px;
                border:10px solid blue;
                background:green;
            }
            .zi {
                float:left;
                margin-top:20px;
                width:200px;
                height:300px;
            }
        </style>
        <script>
            (function(){
                window.onload=function(){
                    var d=document.getElementById("d");
                    var con=document.getElementById("con");
                    var bo=document.getElementById("bo");
                    var zi=document.getElementById('zi');
                    zi.innerHTML=
                        "d.clientWidth="+d.clientWidth+"<br/>"+
                        "d.clientHeight="+d.clientHeight+"<br/>"+
                        "d.scrollWidth="+d.scrollWidth+"<br/>"+
                        "d.scrollHeight="+d.scrollHeight+"<br/>"+
                        "d.offsetWidth="+d.offsetWidth+"<br/>"+
                        "d.offsetHeight="+d.offsetHeight+"<br/>"+
                        "d.clientTop="+d.clientTop+"<br/>"+
                        "d.clientLeft="+d.clientLeft+"<br/>"+
                        "d.scrollTop="+d.scrollTop+"<br/>"+
                        "d.scrollLeft="+d.scrollLeft+"<br/>"+
                        "d.offsetTop="+d.offsetTop+"<br/>"+
                        "d.offsetLeft="+d.offsetLeft+"<br/>"+
                        "con.offsetTop="+con.offsetTop+"<br/>"+
                        "con.offsetLeft="+con.offsetLeft+"<br/>";
                }
            })();
        </script>
    </head>

    <body id="bo">
        <div class="d" id="d">
            <div class="con" id="con">
                <a href="http://cyg7561.blog.163.com/" title="鬼眼邪神的博客">鬼眼邪神的博客</a>
            </div>
        </div>
        <div class="zi" id="zi">
            
        </div>
    </body>
</html>
    

在Chrome中的显示效果:

 

 

转载于:https://www.cnblogs.com/wangtian0711/p/7027853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 JavaScript 和 HTML 来实现对文本的批注功能。以下是一个简单的实现思路: 1. 在 HTML 页面中,使用 `<span>` 标签包裹要批注的文本内容,并为每个 `<span>` 标签添加一个唯一的 ID,例如: ```html <p>这是一段需要批注的文本:<span id="note1">这里需要添加批注</span></p> ``` 2. 在页面中添加一个按钮或者其他触发事件,当用户点击该按钮时,触发 JavaScript 函数。 3. JavaScript 函数中,首先获取用户输入的批注内容,然后使用 DOM 操作将批注内容添加到页面中。可以使用 `<div>` 标签等元素来包裹批注内容,并为该元素添加一个唯一的 ID。然后使用 CSS 样式来设置批注框的样式,例如背景颜色、边框等。 4. 最后,将批注框添加到需要批注的文本旁边。可以使用 JavaScript 中的 `offsetTop` 和 `offsetLeft` 属性来获取文本元素的位置,然后将批注框定位到该位置。 以下是一个简单的实现示例: ```html <html> <head> <style> .note-box { background-color: #fff; border: 1px solid #ccc; padding: 5px; position: absolute; top: 0; left: 0; } </style> </head> <body> <p>这是一段需要批注的文本:<span id="note1">这里需要添加批注</span></p> <button onclick="addNote()">添加批注</button> <script> function addNote() { // 获取用户输入的批注内容 var noteText = prompt("请输入批注内容:"); // 创建批注框元素 var noteBox = document.createElement("div"); noteBox.id = "note-box-" + new Date().getTime(); noteBox.className = "note-box"; noteBox.innerText = noteText; // 获取需要批注的文本元素 var noteElem = document.getElementById("note1"); // 将批注框添加到文本元素旁边 noteElem.parentNode.insertBefore(noteBox, noteElem.nextSibling); // 设置批注框的位置 var noteElemRect = noteElem.getBoundingClientRect(); var noteBoxElem = document.getElementById(noteBox.id); noteBoxElem.style.top = noteElemRect.top + noteElem.offsetHeight + "px"; noteBoxElem.style.left = noteElemRect.left + "px"; } </script> </body> </html> ``` 请注意,这只是一个简单的实现示例,实际实现中可能需要考虑更多的因素,例如批注框的样式、位置计算等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值