BOM基础(二)

  跟DOM一样,BOM其实也是由很多的API组成。 不过对于BOM来说,最痛苦的不是不记得API,而是明明记得这个这个API,却没有考虑到它的兼容性。

  之前的文章中讲到了offset系列的属性,他的宽高是由border,padding和width组成的。而它的offsetLeft和offsetTop则是相对于offsetParent的距离。这里的offsetParent指的是子盒子有定位的父级元素,而如果子盒子没有有定位的父级元素,那么它的offsetParent就是body。讲过了offset系列的,就该讲讲scroll系列的了。

  首先就来说说scrollWidth和scrollHeight这两个属性分别获取的是元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #box {
            width: 100px;
            height: 100px;

            border: 5px solid red;
            padding: 10px;;
        }
    </style>
</head>
<body>
    <div id="box">
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
        啦啦啦
    </div>
    <script>
        var box = document.getElementById("box");
        console.log(box.scrollHeight);
        console.log(box.offsetHeight);
    </script>
</body>
</html>

  上述代码分别输出了div的scrollHeight和offsetHeight,在控制台中,这两个属性打印的值分别是297和130;第二个值没有问题,他就是盒子上下边框宽加上下内边距加高度后得来的。而第一个值,获取的则是撑开之后的大小。可能对于这个值具体的算法有疑问,不过,在实际开发中一般不会出现有很大的内边距和边框时要你使用scrollHeight值的。所以不必太纠结为什么是这个数值,我们只要知道这个数值是随着内容的改变而改变就好了。scrollHeight值得算法是如果内容区域小于上下内边距加高度,那么它的值就是上下内边距加高度,否则就是内容撑开的高度。scrolltLeft也是同理。

  而说完了scrollHeight和scrollLeft之后,就该来说说scrollTop和scrollLeft了,这两个值的用法相同。所以就来说说其中的offsetTop;一般来说,这两个属性都会配上鼠标移动事件来使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #box {
            width: 100px;
            height: 100px;

            overflow: auto;
        }
    </style>
</head>
<body>
    <div id="box">
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
        老王走了
    </div>
    <script src="common.js"></script>
    <script>
        var box = my$("box");
        box.onscroll  = function () {
            console.log(box.scrollTop);
        }

    </script>
</body>
</html>

  上述代码在拉动滚动条的时候执行,输出div的scrollTop。scrollTop显示的是内容区域向上移动的距离。

  上面的代码获取的只是那个小的div中的滚动事件,那么如果在页面中呢?我们就可以把整个页面看做是一个div。这时候就遇到一个问题了,页面到底是body呢,还是html呢?其实,不同的浏览器有不同的解析方式。这时候,我们就要封装兼容性代码了。

function scroll() {
    return {
        scrollLeft:document.body.scrollLeft || document.documentElement.scrollLeft,
        scrollTop:document.body.scrollTop || document.documentElement.scrollTop
    };
}

  在这里,我们封装了一个scroll函数,用来返回一个对象,这个对象有两个属性,这两个属性在调用的时候可以获取页面的滚动距离,并且,如果浏览器是根据body来获取或者根据html来获取他都能兼容。

时间: 2024-10-14 11:43:20

BOM基础(二)的相关文章

【JavaScript】BOM基础总结

javascript看了也一段时间了,前面讲的是基础的知识,还是很好理解的,后面的内容有些也很基础,像BOM,都是介绍的javascript的基础内容,下面对它进行一下小小的总结. 先来一张小图: 一.BOM基础 BOM是browser object model的缩写,简称浏览器对象模型.它提供了很多对象,用于访问浏览器的功能,也就是对浏览器进行操作的.浏览器又显示的内容,而BOM就是承载着我们看到内容的一个载体.BOM定义了JavaScript可以进行操作的浏览器的各个功能部件的接口,提供访问

Html5开发——html+css基础二(个人博客一)

今天没有写完,而且写的还有点问题,所以今天就先不上传代码了(ps:快写完了才发现布局有问题,导致代码太多,感觉写的不是很好,所以今天先分析一下布局) 第一步先写一个大的div用来放ABC三个部分,这个大的div居中! 第二步分别写ABC三个部分,ABC三个部分分别使用浮动(float)来定位.A和B都各使用了一张非常小的图片,通过重复(repeat)属性生成A和B 第三步C部分分别写好3~16这几个模块,在通过组合利用浮动定位.分组如下: E:3 F:4.7.10.13 G:5.8.11.14

Scala 中的函数式编程基础(二)

主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. 2. Higher Order Functions 把其他函数作为参数或者作为返回值,就是 higher order functions,python 里面也可以看到这样使用的情形.在酷壳上的博客有一个例子就是将函数作为返回值. 2.1 匿名函数 在 python 里边叫 lambda 函数,常常与 map(

Python全栈开发【基础二】

Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 1 class int(object): 2 """ 3 int(x=0) -> integer 4 int(x, base=10) -&g

BOM基础(四)

最近写的文章感觉内容不像之前那么充实,内容可能也有点杂.对于DOM,和BOM来说,要理解是不难的,难的是做的时候.要自己想的到,而且,对于目前阶段来说,BOM还存在着很大的兼容性问题,最主要就是要兼容ie8.不过说实在的,用不了多久,ie8也差不多被淘汰了,新版本的ie浏览器对标准属性兼容性还是很好的.不过接下来要说的主题还是BOM中的一些内容.前一篇文章中主要讲了两种注册事件的方式和事件参数.本文主要讲如何移除事件,事件的冒泡. 首先讲讲移除事件,移除事件用的是removeEventListe

R语言基础(二) 可视化基础

> which.max(apply(x[c("x1","x2","x3")], 1, sum))49 > x$num[which.max(apply(x[c("x1","x2","x3")], 1, sum))][1] 2005138149 > hist(x$x1) > plot(x$x1,x$x2) > table(x$x1) 80 81 82 83 84

Bootstrap &lt;基础二十五&gt;警告(Alerts)

警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个可选的关闭按钮.为了创建一个内联的可取消的警告框,请使用 警告(Alerts) jQuery 插件. 您可以通过创建一个 <div>,并向其添加一个 .alert class 和四个上下文 class(即 .alert-success..alert-info..alert-warning..ale

图像处理之基础---二维卷积运算原理剖析

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d的卷积就是

Bootstrap &lt;基础二十六&gt;进度条

Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性,Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .prog

Python基础二--基本控制语句

基本接触每一种语言,都需要做的:1.print 一个"Hello world!" 2.了解基本的数据类型 3.学习控制语句. 当我们学习控制语句,一般都离不开if,for ,while,switch(case).本文就做一个简单的介绍python的基本控制语句,其中我们用if while来做一个经典的"猜数字游戏",if for来做一个"输出完美数". 在此之前,对于一些没用过python的同学而熟悉c/c++等用{}来做块的要注意了,pytho