1.阻止冒泡。

function stopPropagation(event){
event = event || getEvent(event);
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}
Lily['event'] = stopPropagation;

2.阻止事件默认动作。

function preventDefault(event){
event = event || getEvent(event);
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}
Lily['preventDefault'] = preventDefault;

3.在文档加载完时执行函数,不用等待图片都加载完。

function addLoadEvent(loadEvent, waitForImages){
if(!isCompatible()) return false;
if(waitForImages){
addEvent(window, 'load', loadEvent);
} var init = function (){
if(arguments.callee.done) return;
arguments.callee.done = true; loadEvent.apply(document, arguments);
}; if(document.addEventListener){
document.addEventListener("DomContentLoaded", init, false);
} if(/WebKit/i.test(navigator.userAgent)){
var timer = setInterval(function (){
if(/complete|loaded/.test(document.readyState)){
clearInteval(timer);
init();
}
}, 10);
} /*@cc_on @*/
/*@if (@_win32)
document.write("<src id=__ie_loaded defer src=//:><\/script>");
var script = document.getElementById("__ie_loaded");
script.onreadystatechange = function (){
if(this.readyState == "complete"){
this.onreadystatechange = null;
init();
}
};
/*@end @*/ return true;
}
Lily['addLoadEvent'] = addLoadEvent;

4.取得target对象。

function getTarget(event){
event = event || getEvent(event);
var target = event.target || event.srcElement; if(target.nodeType == Lily.node.TEXT_NODE){
target = target.parentNode;
} return target;
}
Lily['getTarget'] = getTarget;

5.判断鼠标哪个键被按下。

function getMouseButton(event){
event = event || getEvent(event);
var buttons = {
'left' : false,
'middle' : false,
'right' : false
}; if(event.toString && event.toString().indexOf('MouseEvent') != -1){
switch(event.button){
case 0:
buttons.left = true;
break;
case 1:
buttons.middle = true;
break;
case 2:
buttons.right = true;
break;
default:
break;
}
}else if(event.button){
switch(event.button){
case 1:
buttons.left = true;
break;
case 2:
buttons.right = true;
break;
case 3:
buttons.left = true;
buttons.right = true;
break;
case 4:
buttons.middle = true;
break;
case 5:
buttons.left = true;
buttons.middle = true;
break;
case 6:
buttons.middle = true;
buttons.right = true;
break;
case 7:
buttons.left = true;
buttons.middle = true;
buttons.right = true;
break;
default:
break; }
}else{
return false;
} return buttons;
}
Lily['getMouseButton'] = getMouseButton;

6.获取鼠标在文档中的位置。

function getPositionInDocument(event){
event = event || getEvent(event);
var x = event.pageX ||
(event.clientX + document.documentElement.scrollLeft) ||
(event.clientX + document.body.scrollLeft);
var y = event.pageY ||
(event.clientY + document.documentElement.scrollTop) ||
(event.clientY + document.body.scrollTop); return {'x' : x, 'y' : y};
}
Lily['getPositionInDocument'] = getPositionInDocument;

7.获取按键的值。

function getKeyPressed(event){
event = event || getEvent(event);
var code = event.keyCode;
var value = String.fromCharCode(code); return {'code': code, 'value': value};
}
Lily['getKeyPressed'] = getKeyPressed;

【写一个自己的js库】 4.完善跨浏览器事件操作的更多相关文章

  1. 【写一个自己的js库】 1.搭个架子先

    最近在看<javascript dom 高级程序设计>,想着跟着里面的代码敲一遍吧,也算是做一下学习笔记吧,所以这不是重新发明轮子,只是个学习的过程. 1.先确定自己的命名空间,并且加入几 ...

  2. 【写一个自己的js库】 2.实现自己的调试日志

    还是本着学习的目的,实现一个自己的调试日志,界面很简单,就是将调试信息显示在页面的正中央,用一个ul包裹,每条信息就是一个li. 1.新建一个myLogger.js文件,将需要的方法声明一下.其中va ...

  3. 【写一个自己的js库】 5.添加修改样式的方法

    1.根据id或class或tag修改样式,样式名是-连接格式的. function setStyleById(elem, styles){ if(!(elem = $(elem)) return fa ...

  4. 【写一个自己的js库】 3.添加几个处理字符串的方法

    1.生成重复的字符串 if(!String.repeat){ String.prototype.repeat = function (count){ return new Array(count + ...

  5. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...

  6. 仿照jquery封装一个自己的js库(二)

    本篇为完结篇.主要讲述如何造出轮子的高级特性. 一. css方法的高级操作 先看本文第一部分所讲的dQuery css方法 //css方法 dQuery.prototype.css=function( ...

  7. 仿照jquery封装一个自己的js库(一)

    所谓造轮子的好处就是复习知识点,加深对原版jquery的理解. 本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包 ...

  8. 仿照jquery封装一个自己的js库

    所谓造轮子的好处就是复习知识点,加深对原版jquery的理解.本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包括 ...

  9. 自己动手写一个iOS 网络请求库的三部曲[转]

    代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大 ...

随机推荐

  1. TF卡座(外焊、内焊、掀盖式、全塑、简易)

    TF卡座(外焊.内焊.掀盖 式.全塑.简易

  2. 删除IE缓存中指定的文件

    DeleteUrlCacheEntry 1.文件单元:WinInt VC声明 BOOL DeleteUrlCacheEntry ( LPCTSTR lpszUrlName); 函数功能 删除Cache ...

  3. C# Exception类

    一.异常类 1.在C#中所有的异常都是使用一个异常类型的示例对象表示的,这些异常类型都是继承自System.Exception类型,或者直接使用System.Exception类型的实例对象: 2.在 ...

  4. SSRS 请求并显示SharePoint人员和组字段

    场景: 使用Reporting Service请求SharePoint List,该list中包含人员和组字段.要求:只显示人员或组的display name.示例如下: 项目 参与人员 期望显示 项 ...

  5. mysql select不使用任何锁(select with nolock)

    在ms sql中可以通过with(nolock)选项指定查询不锁表,在mysql中没有这个选项,需要通过set语句来设置不锁表: SET TRANSACTION ISOLATION LEVEL REA ...

  6. 【Xamarin挖墙脚系列:常用的Mac 命令】

    通俗点说Mac 跟Linux的爹都是Unix,他们都加入了标准的Shell命令工具,bash 所以俩系统中的命令基本通用 Linux下的操作手册,本人自己整理了一份.呵呵~~~~ 还可以使用客户端远程 ...

  7. g++ error: extra qualification on member [-fpermissive]

    以下这段代码是在头文件里面的,DmaOpen DmaClose函数也是直接在class pcie_chip{}里面的.加了个额外的pcie_chip::才会报错. //delete pcie_chip ...

  8. grep搜索当前目录和递归搜索子目录中文本文件的特定pattern

    一般在windows上文本编辑器notepad++,UE这些都有这些功能,Linux下就换了一种方式,用grep来完成文件中信息查找的方式. grep -R -n --include="*. ...

  9. grep, egrep, fgrep笔记

    grep, egrep, fgrep grep: 根据模式搜索文本,并将符合模式的文本行显示出来.Pattern: 文本字符和正则表达式的元字符组合而成匹配条件 grep [options] PATT ...

  10. error LNK2019

    error LNK2019: 无法解析的外部符号 "public: virtual __thiscall Fruit::~Fruit(void)" (??1Fruit@@UAE@X ...