JS加强学习-BOM学习02

BOM的更多的用于特效方面的展示,接下来的学习就是将许多以前用到的知识与现在的结合后做出各种不同的动态效果来。

所以在这部分学习中涉及到的新知识会比较零散,甚至会将以前的知识部分衔接起来。

1. offsetParent

获取当前元素最近的设置了定位的父元素,如果没有父元素定位则选择的是body元素。

这样就可以容易理解offsetLeft的意义了,它是相对于offsetParent的距离。

2. offsetHeight

获取盒子的大小(border + height + padding):只获取盒子的大小加盒子边框加盒子内边距,不考虑超出盒子部分的内容大小。

scrollHeight

获取滚动内容的高度,内容的height + padding,获取的是内容的大小加内边距,不考虑盒子大小。

3. scrollTop

获取内容滚动出盒子的距离。

或获取页面滚动出去的距离:

在页面滚动时,页面滚动出去的部分距离可以使用scrollLeft来获取,但是这个属性在不同的浏览器定义的对象不一样,在谷歌和火狐中整个页面为document.body元素,而在ie8以及以前浏览器整个页面为html,我们需要使用document.documentElement来获取。

因此我们可以使用短路判断来方便我们获取不同浏览器中的距离,如:

document.body.scrollLeft || document.documentElement.scrollLeft

document.body.scrollTop || document.documentElement.scrollTop

注意:还有一种方法可以获取距离window.pageYOffset,这是DOM中标准的属性,但是IE8及其老版本不支持,所以我们还是常用上面的短路判断来获取。

4. 小数问题:

在设置或者改变元素大小或位置的属性值时,如果设置或者改变值存在小数时,浏览器无法精确的识别这个值,原因就是浏览器中最小的分辨率为1px,如果你设置的小数部分值太小浏览器就会自动四舍五入来取值,这样就会出现我们设置或者改变元素的大小或位置不准确了。

5. 获取任意需要的元素样式

如果我们想要获得元素的某个属性值时,可以使用offset系列来获取,但是如果我们需要获得多个属性值,且无法确定需要获得的属性是哪些时再用offset的话就会比较麻烦,不能做到随心所欲的获取。我们也不能使用style["属性名"]的方法获取,因为这个方法无法获取除行内式中设置的属性,比较局限。

我们就需要使用别的方式来获取,而谷歌和火狐就有window.getComputedStyle(element,null)方法,可以获得页面中指定元素的所有属性及属性值,这个方法获得的属性值为一个带有单位的字符串,我们可以将获得的属性值通过parseInt()或者parseFloat()转换为数字类型的值,方便我们做数学运算来改变指定的属性值。

当然说到谷歌和火狐支持的方法就会想到IE是否也支持,回答一定是“不一定”,因为ie8及以前的老版本浏览器不支持该方式,它支持的是element。currentStyle[“属性名”]这个方法。因此就又要做兼容性的处理,使总能获取不同浏览器中元素的属性及属性值。具体的兼容代码如下:

function getStyle(element, attr) {
  if(window.getComputedStyle) {
    return window.getComputedStyle(element,null)[attr];
  }else{
    return element.currentStyle[attr];
  }
}

时间: 2024-08-25 14:42:57

JS加强学习-BOM学习02的相关文章

JS加强学习-BOM学习05

1. 正则表达式 我们学习正则表达式主要的是学习它的规则(语法),还有就是学习正则表达式在JS中的对象RegExp的属性和方法. 1.1 正则表达式定义: 它是用来操作字符串的一种逻辑公式,具体就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“特定字符串的规则”,用这个“规则”来对字符串进行一种过滤和选择. 1.2 正则表达式的特点: 1.2.1 具有非常强的灵活性.逻辑性和功能性 1.2.2 可以用极简单的方式迅速地达到对字符串的复杂控制. 1.2.3 由于能满足各种情况的组合,

JS加强学习-BOM学习04

今天主要是将事件的阶段详细讲一下,还有一些是属于事件对象的常用属性和方法. 1. 注册事件和移除事件 注册事件: addEventListener() attachEvent() 移除事件: removeEventListener() detachEvent() 注意: 需要将元素的事件移除时,需要注意移除事件的执行函数要与注册事件时的执行函数为同一个,如果注册时事件执行函数为一个匿名函数时,就算移除事件时的匿名函数内容一致也无法将事件移除,因为匿名函数每一个都是定义的新的函数,不是唯一.所有注

JS加强学习-BOM学习01

BOM   浏览器对象模型 1. 定时器 1.1 设置定时器: setTimeout(string/function,delay);间隔一定时间后执行一次,且只执行一次. setInterval(string/function,delay);每间隔一定时间后执行一次,一直执行下去. 这两个定时器的返回值是数字类型的定时器ID. 1.2 清除定时器: clearTimeout(定时器Id): clearInterval(定时器Id). 设置定时器和清除定时器需对应设置,不建议使用与设置定时器不一致

【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局

Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的,有基础的可以看下,可以百度到PDF文档的. Ext.Net与ExtJS代码比较 上一篇中我们创建了一个使用Ext.Net创建了一个window窗口,代码非常简单: <ext:Window runat="server" ID="win" Title="示

PhotoSwipe.js 相册展示插件学习

PhotoSwipe.js官网:http://photoswipe.com/,在这个网站上可以下载到PhotoSwipe的文件以及相关的例子. 这个组件主要是用来展示图片.相册用的,还是很实用的. 一.使用这个组件需要引入两个js文件: 1 <script type="text/javascript" src="simple-inheritance.min.js"> 2 <script type="text/javascript"

Js脚本之jQuery学习笔记(1)

Js脚本之jQuery学习笔记(1) 一.javascript基础 单行注释 多行注释 /* */ 数据类型 数值型 字符串型 布尔型 空值 未定义值 转义字符 函数定义:1234567891011121314<head><script language="javascript"function test(m){var xixi="嘻嘻"alert("这是javascript")document.write(xixi + m)}

JS中模板嵌套学习(代码)

<script src="script/jquery-1.4.2.js"></script>    <script src="script/jsrender.js"></script>    <script id="header" type="text/x-jsrender">        <tr>               <th>序号&

JS中childNodes深入学习

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="box"> <div></div> <div></div> <div></div> </div> <script

《JS高程》事件学习笔记

事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. ------------------------------------------------------------------------------------------------------------- 一.事件流 事件流:描述的是页面中接收事件的顺序. IE:事件冒泡流,即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档): NetScape:事件捕获流,即不太具体的节