【写一个自己的js库】 4.完善跨浏览器事件操作
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.完善跨浏览器事件操作的更多相关文章
- 【写一个自己的js库】 1.搭个架子先
最近在看<javascript dom 高级程序设计>,想着跟着里面的代码敲一遍吧,也算是做一下学习笔记吧,所以这不是重新发明轮子,只是个学习的过程. 1.先确定自己的命名空间,并且加入几 ...
- 【写一个自己的js库】 2.实现自己的调试日志
还是本着学习的目的,实现一个自己的调试日志,界面很简单,就是将调试信息显示在页面的正中央,用一个ul包裹,每条信息就是一个li. 1.新建一个myLogger.js文件,将需要的方法声明一下.其中va ...
- 【写一个自己的js库】 5.添加修改样式的方法
1.根据id或class或tag修改样式,样式名是-连接格式的. function setStyleById(elem, styles){ if(!(elem = $(elem)) return fa ...
- 【写一个自己的js库】 3.添加几个处理字符串的方法
1.生成重复的字符串 if(!String.repeat){ String.prototype.repeat = function (count){ return new Array(count + ...
- 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解
<javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...
- 仿照jquery封装一个自己的js库(二)
本篇为完结篇.主要讲述如何造出轮子的高级特性. 一. css方法的高级操作 先看本文第一部分所讲的dQuery css方法 //css方法 dQuery.prototype.css=function( ...
- 仿照jquery封装一个自己的js库(一)
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解. 本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包 ...
- 仿照jquery封装一个自己的js库
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解.本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包括 ...
- 自己动手写一个iOS 网络请求库的三部曲[转]
代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大 ...
随机推荐
- 【图解ASP.NET MVC运行机制理解-简易版】
很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然,这个只是处理请求的一部分环节.百度的面试题“客户端从浏览 ...
- Roy the Robber
Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...
- [Oracle] Data Guard 系列(5) - 创建逻辑备库
在创建逻辑备库之前,必须得先创建物理备库,关于如何创建物理备库,请参考<Data Guard 系列(4) - 在不停主库的情况下创建物理备库>. 1. 在物理备库上停止日志应用服务 SYS ...
- DWR常用<init-param>参数
1 安全参数 allowGetForSafariButMakeForgeryEasier 开始版本:2.0 默认值:false 描述:设置成true使DWR工作在Safari 1.x , 会稍微降低安 ...
- poj 1986 Distance Queries(LCA)
Description Farmer John's cows refused to run in his marathon since he chose a path much too long fo ...
- UGUI Silder
来我们看看这个像温度计的控件, 比如音量面板声音大小的控制.它是一个组合型控件由多个Image 和一个Slider组合而成 它的核心是Slider组件实现的. 简单介绍下Slider组件的属性: Fi ...
- lua 类继承和实现
http://blog.csdn.net/ssihc0/article/details/7742323 Account={balance=}; --新建了一个对像,他有一个属性balance func ...
- Cocos2d-x游戏开发CCBAnimationManager控制动画
CocosBuilder能方便的编辑各种动画.大部分动画都是以独立片段的形式存在的. 须要由程序来控制何时播放. 管理ccbi文件的动画播放有个专门的类:CCBAnimationManager 大致的 ...
- Android开发_关于如何屏蔽Home键
今天在遇到一个要屏蔽Home键的问题,研究一上午终于解决,方法记录于下: 在Android2.3版本以下重写以下方法就能屏蔽Home键: public void onAttachedToWindow( ...
- div添加透明边框透明背景css
-webkit-box-shadow: 1px 0px 15px #696969; background: rgba(255, 255, 255, 0.45) none repeat scroll 0 ...