`
bluenemo
  • 浏览: 179048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

js中scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解

阅读更多

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

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

scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离

scrollWidth:获取对象的滚动宽度

offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度

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

offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置

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均无关)

 

js width height 图解

 

 

&  scrollLeft(right,top,bottom)的用法和特点

在图片滚动的方法中,最常用的就是scroll方法。


上图所示的滚动条,我们称为srcollBar。在div的内容宽度超过div的宽度时。我们给div加属性overflow-x:scroll;就会出现这种效果。见得最多的scrollBar就是浏览器右侧的了。大家都很熟悉。当我们拖动滚动条的时候,未显示部分就会随着拖动显示出来。我们拖动的距离,就是scroll的大小,拖动的距离在四个不同方向上,就有了scrollLeft,scrollRight,scrollTop,scrollBottom四个属性。

这里我们以scrollLeft为例,其他三个都是一样的。由scrollLeft的由来,我们可以知道,如果scrollLeft值递增,效果也就相当于滚动条在向右拖动。在没有scrollBar的情况下,增加scrollBar的值,同样会有内容左移的效果。

也就是说使用scrollLeft的必要条件是

第一:此标签的内容宽度超过了标签本身的宽度

这个很容易理解,如果内容没有超过标签的宽度,不需要横向的滚动就可以看到所有横向的范围,那在使用scrollLeft的时候肯定是无效的了。

在这里很多新手经常会犯一个错误,内容的大小确实是超过了标签的显示范围,但是却因为浏览器的默认属性换行了,也就是没有在横向上超出,这时候同样是不能使用scrollLeft的。

第二:scrollLeft的值范围是在一定范围内的,不能无限增大。

当内容的最右端可以显示的时候,scrollLeft便不能再增加了。这个也容易理解。以浏览器右侧滚动条为例,这个滚动条肯定是能拖到底的,这个拖动有一定的范围,跟页面内容高度有关。

第三:scrollLeft(包括其他三个)常与定时器一起使用,实现位置移动效果,如滚动。

 

& JS定时器setTimeout与setInterval用法分析及实例详解

      定时器可以说是js前端最常用的工具,几乎所有的逐渐变化的动态效果都会使用到定时器,比如说图片滚动(位置渐变)。渐隐渐现。拖拽(不使用计时器会多消耗大量资源)等等。

     

    定时器分两种分别是setTimeout和setInterval。

两者的用法分别是setTimeout(funhander,time);setInterval(fnhander,time);设置的相应计时器需要用clearTimeout(对象)和clearInterval(对象)清掉。有以下几点需要注意:

    第一:setTimeout(funhander,time)的作用是在过time毫秒后,执行一次句柄funhander指向的方法。而setInterval(funhander,time)的作用是,每隔time毫秒后,就执行一次句柄funhander指向的方法。一直到我清掉计时器停止。

    第二:巨大多数的计时器使用都是为了执行渐变、渐隐渐现、位置渐变等效果,所以funhander指向的方法会被多次执行。因此如果我们使用setTimeout做定时器,一般要把计时器的设置写在funhander指向的方法里,这样就可以循环调用,多次执行funhander,一直到我清掉这个定时器。而在使用setInterval设置定时器的时候,一般要放在funhander指向行数的外面。

    第三:funhander指向的方法里处理了渐变中的一步,又会被重复执行,所以在此方法中大多包含有判断语句IF。用来控制渐变到一定程度的时候进行相应处理。比如清掉定时器或者进行循环操作。

    第四:funhander为句柄,此处还可以为代码段,假设重复调用的函数为function test() {alert("1");}则,我们可以写为 var timer = setTimeout(test,1000)或者 var timer = setTimeout("test()",1000)或者 var timer = setTimeout("alert("1")",1000)。但是下面的写法是错误的。var timer = setTimeout(test(),1000)。

    第五:因为funhander部分是句柄,所以不能传递参数,但是有些函数是必须要传递参数的,这时候我们一般用代码段。如果碰到又需要用句柄,又不能用代码段的特殊情况,我们一般用比较特殊的方法处理。如 var timer =setTimeout(test(name),1000)。这时候这个test(name)看起来是不对的,实际上如果他的返回值是一个没有传参的方法,利用子函数可以调用父函数变量的特点,把参数传递到返回函数(子函数)内部。那上面的写法一样是可以的。

    第六:在设定时器的时候一定要有返回值timer(当然你可以起自己想要的名字)。清掉定时器的时候需要使用,也是一个好的习惯。

 

    下面是网上常见的一个例子,我稍微改动了下。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> New Document </title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<form action="">
<input type="text" value="0" name="txt1"/>
<input type="button" value="开始" name="btnStart"/>
<input type="button" value="重置" name="btnReset"/>
</form>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!--
//获取表单中的表单域
var txt=document.forms[0].elements["txt1"];
var btnStart=document.forms[0].elements["btnStart"];
var btnReset=document.forms[0].elements["btnReset"]
//定义定时器的id
var id;
//每10毫秒该值增加1
var seed=0;

btnStart.onclick=function(){
      //根据按钮文本来判断当前操作
      if(this.value=="开始"){
              //使按钮文本变为停止
              this.value="停止";
              //使重置按钮不可用
              btnReset.disabled=true;
              //设置定时器,每0.01s跳一次
              id=window.setInterval(tip,10);
      }else{
              //使按钮文本变为开始
              this.value="开始";
              //使重置按钮可用
              btnReset.disabled=false;
              //取消定时
              window.clearInterval(id);
      }
}

//重置按钮
btnReset.onclick=function(){
     seed=0;
txt.value=seed/100;
}
//让秒表跳一格
function tip(){
      seed++;
      txt.value=seed/100;
}
//-->
</script>

 

下面看一个滚动效果的实例。非常简单,就是内容从左滚动最右的效果。如果有兴趣的话可以吧内容换成图片什么的,看起来会漂亮些。


 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>滚动图片</title>
<style type="text/css">
body,div{border:0;margin:0;padding:0;}
#outer {overflow:hidden;width:300px;border:1px red solid;margin:50px auto;height:148px;}
.part1 {height:140px;width:500px;overflow:hidden;border:4px blue solid;}
</style>
</head>
<body>
<div id="outer">
<div class="part1">
   这里可以放图片什么的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
</div>
</div>
</body>
<script type="text/javascript" language="javascript">
function test() {
document.getElementById("outer").scrollLeft++;
}
var run = setInterval(test,100);
</script>
</html>

分享到:
评论

相关推荐

    JavaScript属性scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解

    在JavaScript中,理解和掌握`scrollLeft`、`scrollWidth`、`clientWidth`以及`offsetWidth`这四个属性对于创建动态且响应式的网页至关重要。这些属性都与元素的尺寸和定位有关,尤其在处理滚动条和元素可视区域时...

    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解

    ### HTML:scrollLeft, scrollWidth, clientWidth, offsetWidth 完全详解 #### 一、scrollHeight 和 scrollWidth **scrollHeight** 和 **scrollWidth** 分别用来获取一个元素的滚动高度和滚动宽度。 - **...

    javascript scrollLeft,scrollWidth,clientWidth,offsetWidth 完全详解

    在JavaScript中,`scrollLeft`, `scrollWidth`, `clientWidth`, `offsetWidth` 等属性是处理元素尺寸和滚动位置的重要工具。这些属性各自代表着不同的意思,在实际开发中有着广泛的应用。 `scrollLeft` 属性用于...

    scrollwidth和offsetwidth区别

    例如,在 IE6.0 和 Firefox 1.0.6+ 中,clientWidth 等于 width + padding,而 OffsetWidth 等于 width + padding + border。在 IE5.0/5.5 中,clientWidth 等于 width - border,而 OffsetWidth 等于 width。 另外...

    offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft等属性图示

    在Web开发中,理解和掌握DOM元素的尺寸与位置属性至关重要,特别是`offsetWidth`、`clientWidth`、`scrollWidth`、`scrollTop`和`scrollLeft`这些属性。它们提供了关于元素几何特性的详细信息,有助于实现精确的布局...

    scrollLeft,scrollTop等等详解[定义].pdf

    在JavaScript中,通过监听`scroll`事件,可以实时获取`scrollLeft`和`scrollTop`的变化,进而实现动态效果,如固定导航栏、平滑滚动等。 总结一下,`scrollLeft`、`scrollTop`、`offsetTop`、`offsetLeft`、`...

    javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法

    在JavaScript中,DOM元素的尺寸和位置是网页布局的关键因素,`offsetWidth`、`clientWidth`、`innerWidth`以及一系列相关属性方法用于获取和处理这些信息。这些属性可以帮助开发者精确地控制页面元素的显示效果,...

    Js中 关于top、clientTop、scrollTop、offsetTop等

    在JavaScript(简称JS)开发过程中,页面元素的位置与尺寸计算是非常常见的需求之一。尤其是在处理复杂的网页布局时,正确理解和使用`top`、`clientTop`、`scrollTop`、`offsetTop`等属性对于实现精确的页面操作至关...

    JS获取各种宽度、高度的简单介绍

    本文档主要介绍了一些常用的用于获取对象尺寸的属性,包括scrollWidth、clientWidth、offsetWidth等,并对它们之间的关系进行了说明。 首先,scrollWidth和scrollHeight属性用于获取元素的滚动宽度和滚动高度。...

    Javascript获取鼠标坐标的各种类型

    JavaScript获取鼠标坐标是Web开发中的常见需求,尤其在交互式应用和动态效果中扮演着重要角色。本篇文章将详细介绍各种JavaScript方法来获取鼠标位置,并解释它们的用途和差异。 首先,我们可以使用`event`对象来...

    js获取屏幕分辨率的方法

    在JavaScript中,可以通过`window.screen`对象来访问屏幕信息。其中两个常用属性是`width`和`height`,分别用于获取屏幕的宽度和高度。 ```javascript // 获取屏幕宽度 var screenWidth = window.screen.width; // ...

    前端vue.js

    ### 前端 Vue.js 知识点概览 #### 一、Vue.js 简介与特性 **Vue.js** 是一款用于构建用户界面的渐进式框架。它不仅能够帮助开发者...在实际项目中,结合 Vue.js 的强大功能,可以实现更加动态和交互丰富的用户界面。

    JS获取浏览器的高度和宽度

    在JavaScript中,获取浏览器的高度和宽度是常见的需求,这在进行网页布局、动态调整元素尺寸或者实现滚动事件处理时尤其重要。以下将详细介绍如何通过JavaScript获取这些信息,并探讨不同浏览器间可能存在的差异。 ...

    js中的如何定位固定层的位置.docx

    在JavaScript中,对固定层(通常指在页面滚动时始终保持在视口中的元素)进行定位是一项常见的需求。本文将深入探讨如何使用JavaScript有效地定位固定层,特别是在不同的浏览器和DOCTYPE声明下。 首先,我们需要...

    JavaScript 获取浏览器的显示区域大小信息

    例如,在某些版本的IE浏览器中,`clientWidth` 和 `clientHeight` 的计算方式与其他浏览器有所不同。为了解决这些问题,可以采取以下策略: 1. **使用条件判断**:根据用户代理(User-Agent)信息选择不同的计算...

Global site tag (gtag.js) - Google Analytics