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. class A<T>where T

    where表明了对类型变量T的约束关系.where T: A表示类型变量是继承于A的,或者是A本身.where T:new()指明了创建T的实例时应该使用的构造函数.

  2. C# 集合详解 (适合新手)

    System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义 ...

  3. secureCRT使用VIM 像LINUX中那样对语法高亮

    1.在SecureCRT中 secureCRT使用VIM时对语法高亮 其实不是secureCRT的功能,而是VIM的 设置:Options ->Session Options -> Ter ...

  4. 【转】 linux内核移植和驱动添加(三)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...

  5. Kth Largest Element in an Array 解答

    Question Find the kth largest element in an unsorted array. Note that it is the kth largest element ...

  6. Android自定义垂直滚动自动选择日期控件

    ------------------本博客如未明正声明转载,皆为原创,转载请注明出处!------------------ 项目中需要一个日期选择控件,该日期选择控件是垂直滚动,停止滚动时需要校正日期 ...

  7. Struts2(五)——核心拦截器

    Struts框架一共为我们提供了35个拦截器,其中默认的拦截器有18个,框架访问action的异常处理,配置信息处理,转发重定向选择,上传等等等等,都是这18个拦截器中设置的,起着非比寻常的作用.而这 ...

  8. CF(441D Valera and Swaps)置换群

    题意:1-n的一个排列, p2, ..., pn,f(p)的定义是此排列要交换最少的数对能够回到原排列1,2,3,4...n.给一个排列p.要将其变换成f值为m的排列,问至少要交换几个数对,并输出字典 ...

  9. 【水题递归】【HDU2044】我大沙茶了

    有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示.   Input 输入数据的第一行是一个整数N,表示测试实例的个数, ...

  10. apache 限制指定user_agent

    有些user_agent 不是我们想要的,可以通过rewrite功能针对 %{HTTP_USER_AGENT} 来rewirete到404页,从而达到限制某些user_agent的请求.   配置如下 ...