javascript基础知识 (八) BOM学习笔记
document.onclick = function(e){
e = e || window.event;
alert( e );
};
四、鼠标事件
.clientX 存储鼠标相对于窗口的水平坐标
document.onclick = function(e){
e = e || window.event;
alert( e.cilentY + (document.body.scrollTop || document.documentElement.scrollTop)); //获取鼠标在文档的高度
//document.body 和 document.documentElement 区别
document.body 与 document.documentElement区别介绍
}
oBox.addEventListener('click' , function(){
alert('1');
}, false);
//兼容IE8及以下写法 参数:(事件名,事件函数):
oBox.attachEvent('onclick' , function(){
alert(1);
});
兼容写法:用一个函数包括它们
function addEvent(obj , eName , eFn){
document.addEventListener ? obj.addEventListener(eName, eFn) : obj.attachEvent('on'+eName , eFn);
}
2》解绑事件:
addEventListener 对应 removeEventListener;
attachEvent 对应 detachEvent;
demo:
function fn2(){
alert(1);
} oBox.addEventListener('click' , fn2);
oBox.removeEventListener('click' , fn2); oBox.attachEvent('onclick' , fn2);
oBox.detachEvent('onclick' , fn2);
通过addEvenetListener注册的事件,最好不要用匿名事件函数,因为不好解绑
如果说有实际的需要,那么采用自己封装的添加事件 和 解绑事件
解绑匿名事件:
var oBox = document.getElementById('box'); addEvent(oBox , 'click' , function(){
alert('大锤');
});
removeEvent(oBox , 'click' , function(){
alert('大锤');
}); function addEvent( obj , eName , eFn ) {
if (obj[eName+'FLY']){ //用数组把函数存储下来
obj[eName+'FLY'].push(eFn);
}else{
obj[eName+'FLY'] = [eFn];
};
if (document.addEventListener){
obj.addEventListener(eName,eFn);
}else{
obj.attachEvent('on'+eName,eFn);
}
};
function removeEvent( obj , eName , eFn ) {if (obj[eName+'FLY']){ //传递的是匿名函数
for (var i=0;i<obj[eName+'FLY'].length;i++){
if (obj[eName+'FLY'][i]+'' === eFn+''){//把函数转换成字符串 再进行比较
if (document.removeEventListener){
obj.removeEventListener(eName,obj[eName+'FLY'][i]);
}else{
obj.detachEvent('on'+eName,obj[eName+'FLY'][i]);
};
};
};
};
};
综上写一个功能比较齐全的封装:
var oBox = document.getElementById('box'); addEvent(oBox , 'click' , function(){
alert('大锤');
});
addEvent(oBox , 'click' , fn2);
removeEvent(oBox , 'click' , function(){
alert('大锤');
}); function addEvent( obj , eName , eFn ) {
if (obj[eName+'FLY']){
obj[eName+'FLY'].push(eFn);
}else{
obj[eName+'FLY'] = [eFn];
};
if (document.addEventListener){
obj.addEventListener(eName,eFn);
}else{
obj.attachEvent('on'+eName,eFn);
}
};
function removeEvent( obj , eName , eFn ) {
if (eFn){
if (document.removeEventListener){ //有名函数
obj.removeEventListener(eName,eFn);
}else{
obj.detachEvent('on'+eName,eFn);
};
if (obj[eName+'FLY']){ //传递的是匿名函数
for (var i=0;i<obj[eName+'FLY'].length;i++){
if (obj[eName+'FLY'][i]+'' === eFn+''){
if (document.removeEventListener){
obj.removeEventListener(eName,obj[eName+'FLY'][i]);
}else{
obj.detachEvent('on'+eName,obj[eName+'FLY'][i]);
};
};
};
};
}else{//不传函数参数则全部解除
if (obj[eName+'FLY']){ //全部解绑
for (var i=0;i<obj[eName+'FLY'].length;i++){
if (document.removeEventListener){
obj.removeEventListener(eName,obj[eName+'FLY'][i]);
}else{
obj.detachEvent('on'+eName,obj[eName+'FLY'][i]);
}
};
};
};
}; function fn1() {
alert('大狗蛋');
};
function fn2() {
alert('小狗蛋');
};
六、滚动事件
1》在IE各版本 和 谷歌中 兼容onmousewheel
火狐中只能通过 addEventListener 注册
document.onmousewheel = function(){
console.log(1);
};
document.addEventListener('DOMMouseScroll',function () {//火狐写法
console.log(1);
});
兼容写法:
function mousewheel(obj , eFn) {
document.onmousewheel === null?obj.onmousewheel=eFn:obj.addEventListener('DOMMouseScroll',eFn);
}
2》滚动值 wheelDelta 和 detail
在chrome和IE里,值是120的倍数,负值代表向下滚轮(贴近胸),正值代表向上滚轮(往上推)
console.log(e.detail); //在firefox里,值是3的倍数,负值代表向上滚轮(往上推),正值代表向下滚轮(贴近胸)
demo:
var oImg = document.getElementById('img');
var prop = 1;
var w = oImg.width;
mousewheel(oImg , function(e){
//console.log(1);
e=e||window.event;
var delta = e.wheelDelta/120 || -e.detail/3;//判断delta的正负就可以知道向上滚轮还是向下滚轮 if (delta<0){
prop -= 0.05;
}else{
prop += 0.05;
};
console.log(w);
this.width = w*prop;
}); function mousewheel(obj , eFn) {
document.onmousewheel === null?obj.onmousewheel=eFn:obj.addEventListener('DOMMouseScroll',eFn);
}
javascript基础知识 (八) BOM学习笔记的更多相关文章
- Go语言核心36讲(Go语言基础知识一)--学习笔记
01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...
- Go语言核心36讲(Go语言基础知识二)--学习笔记
02 | 命令源码文件 我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件. 这里的源码文件又分为三种,即:命令源码文件.库源码文件和测 ...
- Go语言核心36讲(Go语言基础知识三)--学习笔记
03 | 库源码文件 在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话). 这里的"其他代码" ...
- Go语言核心36讲(Go语言基础知识四)--学习笔记
04 | 程序实体的那些事儿(上) 还记得吗?Go 语言中的程序实体包括变量.常量.函数.结构体和接口. Go 语言是静态类型的编程语言,所以我们在声明变量或常量的时候,都需要指定它们的类型,或者给予 ...
- Go语言核心36讲(Go语言基础知识五)--学习笔记
05 | 程序实体的那些事儿(中) 在前文中,我解释过代码块的含义.Go 语言的代码块是一层套一层的,就像大圆套小圆. 一个代码块可以有若干个子代码块:但对于每个代码块,最多只会有一个直接包含它的代码 ...
- Go语言核心36讲(Go语言基础知识六)--学习笔记
06 | 程序实体的那些事儿 (下) 在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论.还记得吗? 最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关 ...
- JavaScript 基础知识 - BOM篇
前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- Javascript基础知识总结一
Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
随机推荐
- CF1076D Edge Deletion
洛谷传送门 cf传送门 这道题作为div.2的D题,被我一眼秒了我觉得十分荣幸,然后就开始写,然后就写了好久. AC之后看网上的题解,发现好多最短路树的,猛然发现我写的好复杂啊,结果还看到了直接一遍d ...
- swap(2018.10.16)
题意:给定一个{0,1,2,3,-,n-1}的排列 p. 一个{0,1,2 ,-,n-2}的排列 q 被认为是优美的排列, 当且仅当 q 满足下列条件 对排列 s={0,1,2,3,...,n-1}进 ...
- SpringBoot | Hibernate @Transient 注解
在默认情况下,持久化类的所有属性会自动映射到数据表的数据列.如果在实际应用中,不想持久保存某些属性,则可以考虑使用@Transient来修饰它们. 如果一个属性并非数据库表的字段映射,就务必将其标示为 ...
- Qt 进程和线程之一:运行一个进程和进程间通信
Qt提供了对进程和线程的支持.本节讲述了怎样在Qt应用程序中启动一个进程,以及几种常用的进程间通信方法.如果对进程和线程的概念不是很了解,可以看我的另一篇博客:[多进程和多线程的概念. 设计应用程序时 ...
- Java EE学习笔记(五)
Spring事务管理 1.Spring事务管理概述 1).在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于事务处理的API.(事务特性:ACID,原子性,一致性,隔离性 ...
- gem install 提示rubygems.org连接不上的问题
周五的时候安装compass时遇到的,总是报错,后来反应过来是被墙了.解决办法就是使用淘宝的rubygem的镜像 gem sources --remove https://rubygems.org/ ...
- D - 連結 / Connectivity 并查集
http://abc049.contest.atcoder.jp/tasks/arc065_b 一开始做这题的时候,就直接蒙逼了,n是2e5,如果真的要算出每一个节点u能否到达任意一个节点i,这不是f ...
- cucumber 文件目录结构和执行顺序
引用链接:http://www.cnblogs.com/timsheng/archive/2012/12/10/2812164.html Cucumber是Ruby世界的BDD框架,开发人员主要与两类 ...
- Java编程简介
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=3 JAVA由Sun Microsystems In ...
- Java设计模式之单例模式 - Singleton
用来创建独一无二的,是能有一个实例的对象的入场券.告诉你一个好消息,单例模式的类图可以说是所有模式的类图中最简单的,事实上,它的类图上只有一个类!但是,可不要兴奋过头,尽管从类设计的视角来说很简单,但 ...