【BOM操作】JavaScript中的event对象之总结

Event属性和方法: 

1. type:事件的类型,如onlick中的click; 

2. srcElement/target:事件源,就是发生事件的元素; 

3. button:声明被按下的鼠标键,整数,1代表左键,2代表右键,4代表中键,如果按下多个键,酒把这些值加起来,所以3就代表左右键同时按下;(firefox中 0代表左键,1代表中间键,2代表右键) 

4. clientX/clientY:事件发生的时候,鼠标相对于浏览器窗口可视文档区域的左上角的位置;(在DOM标准中,这两个属性值都不考虑文档的滚动情况,也就是说,无论文档滚动到哪里,只要事件发生在窗口左上角,clientX和clientY都是 0,所以在IE中,要想得到事件发生的坐标相对于文档开头的位置,要加上 
document.body.scrollLeft和 document.body.scrollTop) 

5. offsetX,offsetY/layerX,layerY:事件发生的时候,鼠标相对于源元素左上角的位置(这一定要定义position:relative;,值 可以是fixed absolute relative这几种); 

6. x,y/pageX,pageY:检索相对于父要素鼠标水平坐标的整数; 

7. altKey,ctrlKey,shiftKey等:返回一个布尔值; 

8. keyCode:返回keydown何keyup事件发生的时候按键的代码,以及keypress 事件的Unicode字符;(firefox2不支持 event.keycode,可以用 event.which替代 ) 

9. fromElement,toElement:前者是指代mouseover事件中鼠标移动过的文档元素,后者指代mouseout事件中鼠标移动到的文档元素; 
上面支持IE

下面的支持firefox:

event.relatedTarget;去那里
从那里来用event.srcElement || event.target

10. cancelBubble:一个布尔属性,把它设置为true的时候,将停止事件进一步起泡到(捕获)包容层次的元素;(e.cancelBubble = true; 相当于 e.stopPropagation();) 

11. returnValue:一个布尔属性,设置为false的时候可以组织浏览器执行默认的事件动作;(e.returnValue = false; 相当于 e.preventDefault();) 

12. attachEvent(),detachEvent()/addEventListener(),removeEventListener:为制定DOM对象事件类型注册多个事件处理函数的方法,它们有两个参数,第一个是事件类型,第二个是事件处理函数。在 
attachEvent()事件执行的时候,this关键字指向的是window对象,而不是发生事件的那个元素; 

13. screenX、screenY:鼠标指针相对于显示器左上角的位置,如果你想打开新的窗口,这两个属性很重要;


HTML DOM innerheight、innerwidth 属性
定义和用法

只读属性,声明了窗口的文档显示区的高度和宽度,以像素计。

这里的宽度和高度不包括菜单栏、工具栏以及滚动条等的高度。

IE 不支持这些属性。它用 document.documentElement 或 document.body (与 IE 的版本相关)的 clientWidth 和 clientHeight 属性作为替代。



Window 对象

所有浏览器都支持 window 对象。它表示浏览器窗口。

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。

全局变量是 window 对象的属性。

全局函数是 window 对象的方法。

甚至 HTML DOM 的 document 也是 window 对象的属性之一:

window.document.getElementById("header");

与此相同:

document.getElementById("header");

浏览器对象模型 (BOM)

浏览器对象模型(Browser Object Model)尚无正式标准。


Window 尺寸

有三种方法能够确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)。

对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

    - window.innerHeight - 浏览器窗口的内部高度
    - window.innerWidth - 浏览器窗口的内部宽度

对于 Internet Explorer 8、7、6、5:

    - document.documentElement.clientHeight
    - document.documentElement.clientWidth

或者

    - document.body.clientHeight
    - document.body.clientWidth

实用的 JavaScript 方案(涵盖所有浏览器):

实例
var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;

var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

亲自试一试

该例显示浏览器窗口的高度和宽度:(不包括工具栏/滚动条)



Object 对象

Object 对象自身用处不大,不过在了解其他类之前,还是应该了解它。因为 ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中,所以理解了 Object 对象,就可以更好地理解其他对象。

Object 对象具有下列属性:

constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

Object 对象还具有几个方法:

hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))
IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。
PropertyIsEnumerable
判断给定的属性是否可以用 for...in 语句进行枚举。
ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
ValueOf()
返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

注释:上面列出的每种属性和方法都会被其他对象覆盖。


一些说明: 


1.  event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等; 


2.  event对象只在事件发生的过程中才有效。 

firefox里的event跟IE里的不同,IE里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。 

在IE/Opera中是window.event,在Firefox中是event;而事件的对象,在IE中是window.event.srcElement,在Firefox中是event.target,Opera中两者都可用。 


3.  下面两句效果相同 

var evt = (evt) ? evt : ((window.event) ? window.event : null); 

var evt = evt || window.event; // firefox下window.event为null, IE下event为null 


4.  IE中事件的起泡 

IE中事件可以沿着包容层次一点点起泡到上层,也就是说,下层的DOM节点定义的事件处理函数,到了上层的节点如果还有和下层相同事件类型的事件处理函数,那么上层的事件处理函数也会执行。例如, div 标签包含了 a ,如果这两个标签都有onclick事件的处理函数,那么执行的情况就是先执行标签 a 的onclick事件处理函数,再执行 div 的事件处理函数。如果希望的事件处理函数执行完毕之后,不希望执行上层的 div 的onclick的事件处理函数了,那么就把cancelBubble设置为true即可。 

var s=+newDate();

解释如下:=+是不存在的;

+new Date()是一个东西;

+相当于.valueOf();

看到回复补充一下.getTime()这个也是得到毫秒数

//4个结果一样返回当前时间的毫秒数
alert(+new Date());
alert(+new Date);
var s=new Date();
alert(s.valueOf());
alert(s.getTime());

### JavaScriptBOM 的知识点总结 #### 1. **BOM 核心对象** BOM(Browser Object Model)的核心对象是 `window`,它代表了一个浏览器窗口或框架的实例。在浏览器环境中,`window` 不仅是一个用于访问浏览器窗口的接口,同时也是 ECMAScript 定义的 Global 对象。这意味着所有的全局变量和函数都自动成为 `window` 对象的属性和方法[^2]。 #### 2. **窗口之间的关系** - `top`: 指向最外层的框架。 - `parent`: 指向当前框架的父级框架。 - `self`: 指向当前窗口本身。 这些属性可以帮助开发者理解嵌套框架中的层次结构并进行相应的操作[^2]。 #### 3. **窗口位置管理** 可以通过以下属性获取窗口相对于屏幕的位置: - `screenLeft`, `screenTop`: 获取窗口左边缘和顶部距离屏幕的距离(适用于 IE 浏览器)。 - `screenX`, `screenY`: 同样用于获取窗口相对于屏幕的位置(适用于其他主流浏览器)。 还可以通过以下方法调整窗口的位置: - `moveTo(x, y)`: 将窗口移动到指定的绝对坐标。 - `moveBy(dx, dy)`: 将窗口按照给定的偏移量移动[^2]。 #### 4. **窗口大小控制** 可以使用以下属性来获取或设置窗口的大小: - `outerWidth`, `outerHeight`: 表示整个窗口的外部宽度和高度,包括工具栏、滚动条等。 - `innerWidth`, `innerHeight`: 表示视口区域的实际可见宽度和高度。 - `document.body.clientWidth`, `document.body.clientHeight`: 返回文档主体的内容宽高(不包含滚动条)。 - `resizeTo(width, height)`: 设置窗口的大小为指定的宽高。 - `resizeBy(dw, dh)`: 增加或减少窗口的宽高[^2]。 #### 5. **打开新窗口** `window.open(url, name, features)` 是用来创建新窗口的主要方法。其中: - `url`: 新窗口加载的目标地址。 - `name`: 窗口名称,如果已存在同名窗口,则会重用该窗口。 - `features`: 可选参数,定义新窗口的各种特性,如宽度、高度、是否显示菜单栏等。 #### 6. **关闭窗口** `window.close()` 方法允许关闭由脚本打开或者用户手动打开的窗口。需要注意的是,在某些现代浏览器中,只有当窗口是由同一脚本调用 `open` 创建时才能被成功关闭。 #### 7. **键盘事件处理** 对于键盘交互,BOM 提供了三种主要类型的键盘事件及其对应的属性: - `keydown`: 当按键被按下时触发。 - `keypress`: 当字符键被按压时触发;此事件通常只针对可打印字符有效。 - `keyup`: 当按键释放时触发。 常用的属性包括: - `keyCode`: 返回所按键的 ASCII 编码值,主要用于识别数字和字母键。 - `charCode`: 在 `keypress` 事件中返回实际输入字符的 Unicode 或 ASCII 值(注意兼容性问题)。例如,在实现功能替代时,可以用 Enter 键模拟 Tab 键的行为[^1]: ```javascript var inputs = document.querySelectorAll('input[type="text"]'); inputs.forEach(function(input, index) { input.addEventListener('keydown', function(event) { if (event.keyCode === 13 && index < inputs.length - 1) { // 如果按下Enter键 event.preventDefault(); // 防止默认行为 inputs[index + 1].focus(); // 移动焦点至下一个输入框 } }); }); ``` #### 8. **定时器** BOM 支持两种常见的计时方式: - `setTimeout(func, delay)`: 延迟一段时间后执行某次性的回调函数。 - `setInterval(func, interval)`: 按照固定的时间间隔重复执行某个函数。 取消它们分别需要调用 `clearTimeout(id)` 和 `clearInterval(id)` 来停止未完成的任务。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值