function stopBubble(e) {
if (e && e.stopPropagation) {//如果传入了事件对象,那么就是非IE浏览器
e.stopPropagation();
} else {
window.event.cancelBubble = true;//使用IE的方式来取消事件冒泡
}
}
function stopDefault(e) {
if (e && e.preventDefault) {
e.preventDefault();//防止默认浏览器行为(W3C)
} else {
window.event.returnValue = false;
}
return false;
} function addEvent(element, type, handler) {
if (!handler.$$guid) {//为每一个事件处理函数赋予一个独立的ID
handler.$$guid = addEvent.guid++;
}
if (!element.events) {//为元素建立一个事件类型的散列表
element.events = {};
}
var handlers = element.events[type];
if (!handler) {
handlers = element.events[type] = {};
if (element["on" + type]) {//存储已有的事件处理函数(如果已经存在一个)
handlers[0] = element["on" + type];
}
}
handlers[handler.$$guid] = handler;//在散列表中存在该事件处理函数
element["on" + type] = handleEvent;
}
addEvent.guid = 1;//创建独立ID的计数器
function removeEvent(element, type, handler) {//从散列表中删除事件处理函数
if (element.events && element.events[type]) {
delete element.events[type][handler.$$guid];
}
}
function handleEvent(event) {
var returnValue = true;
event = event || fixEvent(window.event);//获得事件对象(IE使用全局的事件对象)
var handlers = this.events[event.type];//获得事件处理函数散列表的引用
for (var i in handlers) {//依次执行每个事件处理函数
this.$$handlerEvent = handlers[i];
if (this.$$handlerEvent(event) === false) {
returnValue = false;
}
}
return returnValue;
}
function fixEvent(event) {//增加一些IE事件对象的缺乏的方法
event.preventDefault = fixEvent.preventDefault;//增加W3C标准事件方法
event.stopPropagation = fixEvent.stopPropagation;
return event;
}
fixEvent.preventDefault = function () {
this.returnValue = false;
}
fixEvent.stopPropagation = function () {
this.cancelBubble = true;
}
//获取指定元素elem的样式属性
function getStyle(elem, name) {
if (elem.style[name]) {//如果属性存在于style[]中,那么它已被设置了(并且是当前的)
return elem.style[name];
} else {
if (elem.currentStyle) {//尝试使用IE的方法
return elem.currentStyle[name];
} else if (document.defaultView && document.defaultView.getComputedStyle) {//或者W3C的方法,如果存在的话
//name=name.replace(/([A-Z)/g,"-$1");
name = name.toLowerCase();
var s = document.defaultView.getComputedStyle(elem, '');//获取样式对象并获取属性(存在的话)值
return s && s.getPropertyValue(name);
} else {
return null;
}
}
}
//获取元素的X(水平、左端)位置
function pageX(elem) {
return elem.offsetParent ?//查看我们是否位于根元素
elem.offsetLeft + pageX(elem.offsetParent) ://如果我们能继续得到上一个元素,增加当前的偏移量并继续向上递归
elem.offsetLeft;//否则获得当前的偏移量
}
//获得元素Y(垂直、顶端)位置
function pageY(elem) {
return elem.offsetParent ?//查看我们是否位于根元素
elem.offsetTop + pageY(elem.offsetParent) ://如果能继续得到上一个元素,增加当前的偏移量并继续向上递归
elem.offsetTop;//否则获取当前的偏移量
}
//获取元素相对于父亲的水平位置
function parentX(elem) {
return elem.parentNode == elem.offsetParent ?//如果offsetParent是元素的父亲,那么提前退出
elem.offsetLeft :
pageX(elem) - pageX(elem.parentNode);//否则,我们需要找到元素和元素的父亲相对于整个页面位置,并计算他们之前的差
}
//获取元素相对于父亲的垂直位置
function parentY(elem) {
return elem.parentNode == elem.offsetParent ?//如果offsetParent是元素的父亲,那么提前退出
elem.offsetTop :
pageX(elem) - pageY(elem.parentNode);//否则,我们需要找到元素和元素的父亲相对于整个页面位置,并计算他们之前的差
}
//恢复css原的属性值 防止reset css函数副作用的函数
function restoreCSS(elem, prop) {
for (var i in prop) {//重置所有属性,恢复它们的原有值
elem.style[i] = prop[i];
}
}
//设置CSS一组属性的函数,它可以恢复到原有设置
function resetCSS(elem, prop) {
var old = [];
for (var i in prop) {
old[i] = elem.style[i];//记录旧的属性值
elem.style[i] = prop[i];//并设置新的值
}
return old;//返回已经变化的值集合,预留给restoreCSS函数使用
}
function getHeight(elem) {//获得元素的真实高度
return parseInt(getStyle(elem, 'height'));//获得CSS的最终值并解析出可用的数值
}
function getWidth(elem) {//获得元素的真实宽度
return parseInt(getStyle(elem, 'width'));//获得CSS的最终值并解析出可用的数值
}
//查找元素完整的,可能的高度
function fullHeight(elem) {
//如果元素是显示的,那么使用offsetHeight就能得到高度,如果没有offsetHeight,则使用getHeight()
if (getStyle(elem, 'display') != 'none') {
return elem.offsetHeight || getHeight(elem);
}
//处理display为none的元素,所以重置它的css属性以获取更精确的读数
var old = resetCSS(elem, {
display: '',
visibility: 'hidden',
position: 'absolute'
});
var h = elem.clientHeight || getHeight(elem);//使用clientHeihgt找到元素的完整高度,如果还不生效,则使用getHeight函数
restoreCSS(elem, old);//恢复css原的属性
return h;//返回元素的完整高度
}
//查找元素完整的,可能的宽度
function fullWidth(elem) {
//如果元素是显示的,那么使用offsetWidth就能得到高度,如果没有offsetHeight,则使用getHeight()
if (getStyle(elem, 'display') != 'none') {
return elem.offsetWidth || getWidth(elem);
}
//处理display为none的元素,所以重置它的css属性以获取更精确的读数
var old = resetCSS(elem, {
display: '',
visibility: 'hidden',
position: 'absolute'
});
var h = elem.clientWidth || getWidth(elem);//使用clientWidth找到元素的完整高度,如果还不生效,则使用getWidth函数
restoreCSS(elem, old);//恢复css原的属性
return h;//返回元素的完整高度
} function hide(elem) {//隐藏元素
var curDisplay = getStyle(elem, 'display');//找到元素display的当前状态
if (curDisplay != 'none') {//记录它的display状态
elem.$oldDisplay = curDisplay;
}
elem.style.display = 'none';//设置display为none 隐藏元素
}
function show(elem) {//显示元素
elem.style.display = elem.$oldDisplay || '';//设置display属性为它的原始值,如没有记录原始值 则使用block
} function setOpacity(elem, level) {//设置元素透明度 级别从0-100
if (elem.filters) {//如果存在filters这个属性 则它是IE 所以设置元素的Alpha滤镜
elem.style.filters = "alpha(opacity=" + level + ")";
} else {
elem.style.opacity = level / 100;//使用W3C的opacity属性
}
}
function slideDown(elem) {
elem.style.height = '0px';//从0高度开始滑动
show(elem);//先显示元素(但是看不到它,因为它的高度是0)
var h = fullHeight(elem);//找到元素的完整的潜在高度
for (var i = 0; i <= 100; i += 5) {//在一秒钟内执行一个20帧的动画
//保证能够保持正确的i的闭包函数
(function () {
var pos = i;
setTimeout(function () {
elem.style.height = ((pos / 100) * h) + 'px';
}, (pos + 1) * 10);
})();
}
}
function fadeIn(elem) {
setOpacity(elem, 0);//从0透明度开始
show(elem);//先显示元素(但是看不到它,因为它的透明度是0)
for (var i = 0; i <= 100; i += 5) {//在一秒钟内执行一个20帧的动画
//保证能够保持正确的i的闭包函数
(function () {
var pos = i;
setTimeout(function () {
setOpacity(elem, pos);
}, (pos + 1) * 10);
})();
}
}
function getX(e) {//获取光标的水平位置
e = e || window.event;//标准化事件对象
return e.pageX || e.clientX + document.body.scrollLeft;//先检查非IE浏览器的位置,再检查IE的位置
}
function getY(e) {//获取光标的垂直位置
e = e || window.event;//标准化事件对象
return e.pageY || e.clientY + document.body.scrollTop;//先检查非IE浏览器的位置,再检查IE的位置
}
function getElementX(e) {//获得鼠标相对于当前元素(事件对象e的属性target)的X位置
return (e && e.layerX) || window.event.offsetX;//获得正确的偏移量
}
function getElementY(e) {//获得鼠标相对于当前元素(事件对象e的属性target)的Y位置
return (e && e.layerY) || window.event.offsetY;//获得正确的偏移量
}
function pageHeight() {//返回页面的高度(增加内容的时候可能会改变)
return document.body.scrollHeight;
}
function pageWidth() {//返回页面的宽度(增加内容的时候可能会改变)
return document.body.scrollWidth;
}
function scrollX() {//确定浏览器水平滚动位置的函数
var de = document.documentElement;
return self.pageXOffset ||//如果浏览器存在pageXOffset属性 则使用它
(de || de.scrollLeft) ||//尝试获取根节点的左端滚动的偏移量
document.body.scrollLeft;//尝试获取body元素的左端滚动的偏移量
}
function scrollY() {//确定浏览器垂直滚动位置的函数
var de = document.documentElement;
return self.pageYOffset ||//如果浏览器存在pageYOffset属性 则使用它
(de || de.scrollTop) ||//尝试获取根节点的顶端滚动的偏移量
document.body.scrollTop;//尝试获取body元素的顶端滚动的偏移量
}
function windowHeight() {//获取视口的高度
var de = document.documentElement;
return self.innerHeight ||////如果浏览器存在innerHeight属性 则使用它
(de && de.clientHeight) ||//尝试获取根节点的高度偏移量
document.body.clientHeight;//尝试获取body元素的高度偏移量
}
function windowWidth() {//获取视口的宽度
var de = document.documentElement;
return self.innerWidth ||////如果浏览器存在innerWidth属性 则使用它
(de && de.clientWidth) ||//尝试获取根节点的高度偏移量
document.body.clientWidth;//尝试获取body元素的高度偏移量
}

零散的JavaScript公用方法的更多相关文章

  1. JavaScript使用方法和技巧大全

        有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通Ja ...

  2. JavaScript - reduce方法,reduceRight方法 (Array)

    JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...

  3. JavaScript slice() 方法

    JavaScript slice() 方法  JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...

  4. JavaScript toLocaleString() 方法

    JavaScript toLocaleString() 方法 JavaScript Array 对象 定义和用法 把数组转换为本地字符串. 语法 arrayObject.toLocaleString( ...

  5. 关于JavaScript lastIndexOf() 方法 w3school.com.cn写的不一定全对

    关于JavaScript lastIndexOf() 方法 w3school.com.cn的表述是 定义和用法 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的 ...

  6. javascript一些方法兼容

    javascript一些方法兼容 标签(空格分隔): javascript 方法收集 [TOC] Object.keys 参考地址 if (!Object.keys) Object.keys = fu ...

  7. 在Swift中使用JavaScript的方法和技巧

    本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...

  8. 把C编译成javascript的方法

    把C编译成javascript的方法,便于嵌入到HTML5中 https://github.com/kripken/emscripten

  9. DbHelperSQL 判断数据库表结构公用方法

    #region 公用方法        /// <summary>        /// 判断是否存在某表的某个字段        /// </summary>        ...

随机推荐

  1. HttpClient4.5 SSL访问工具类

    要从网上找一个HttpClient SSL访问工具类太难了,原因是HttpClient版本太多了,稍有差别就不能用,最后笔者干脆自己封装了一个访问HTTPS并绕过证书工具类. 主要是基于新版本Http ...

  2. .Net分布式异常报警系统-简介

    系统简介 分布式异常报警系统就是收集系统运行过程中产生的未处理异常,检查系统运行的状态,并将异常信息统一发送到服务端,由服务端将信息通知到相关的责任人.  问题 我们在项目开发中可能遇到以下几个问题: ...

  3. js的Object和Function

    自己闲的没事干,自己想通过js的了解写一个Function和Object之间的关系,可以肯定的是我写错了,但是希望可以有所启发. Function和Object Function.__proto__ ...

  4. ajax请求加载Loading或错误提示

    <div id="loadingDiv" style="color:#f39800;">Loading...</div> <scr ...

  5. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  6. MVC-通过对象获取整个表单内容

    -------- 在MVC的Controller(控制器)里面定义相同的方法时,我们需要解决重载问题: 解决方案一:在参数中定义一个FormCollection类型,解决问题 [HttpSet] pu ...

  7. js表单提交,面向对象

    一.js表单验证之后再提交 1.普通按钮onclick函数调用表单的submit()函数 <input type=button name="submit1" value=&q ...

  8. zabbix 用 LLD 完全自动化监控 Oracle

    文章转载自:http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=2651296856&idx=1&sn=2bdf78071 ...

  9. mysql查询所有记录,并去掉重复的记录

    select * from tablename group by name;如果是select * from tablename group by name,age;那么查询的是满足name和age都 ...

  10. hdu 4612 强连通

    题意:有一些联通的地方,如果2点间只有一条路径,这样的边叫做桥,现在让你添加一个桥,使最后的桥最少,问最少的桥使多少? 先求一次强连通分量,然后图就分成了几个块,将这几个块看做点,求出总共有多少条重建 ...