commonJS — 全局操作(for Window)
for Window
github: https://github.com/laixiangran/commonJS/blob/master/src/forWindow.js
代码
/**
* Created by laixiangran on 2016/1/24
* homepage:http://www.cnblogs.com/laixiangran/
* for Window
*/
(function() {
var com = window.COM = window.COM || {};
com.$W = {
/**
* 在window.onload前执行,相当于jq的ready()
* 使用domReady.ready()将执行函数加入队列中
**/
domReady: (function() {
// 用于添加要执行的函数
var domReady = function() {
var fnArr = Array.prototype.slice.call(arguments);
// 页面如果加载完毕则直接运行
if (domReady.isReady) {
fnArr.forEach(function(fn) {
fn();
});
}
else {
domReady.fns = fnArr;
}
};
// 用于判定页面是否加载完毕
domReady.isReady = false;
domReady.fns = [];
// 执行所有在window.onload之前放入的函数
domReady.fireReady = function() {
if (!domReady.isReady) {
if (!document.body) {
return setTimeout(domReady.fireReady, 16);
}
domReady.isReady = true;
if (domReady.fns.length) {
domReady.fns.forEach(function(fn) {
fn();
});
}
}
};
// 开始初始化domReady函数,判定页面的加载情况
if (document.readyState === "complete") {
domReady.fireReady();
} else if (-[1,]) {
document.addEventListener("DOMContentLoaded", function() {
document.removeEventListener("DOMContentLoaded", arguments.callee, false);
domReady.fireReady();
}, false);
} else {
// 当页面包含图片时,onreadystatechange事件会触发在window.onload之后,
// 换言之,它只能正确地执行于页面不包含二进制资源或非常少或者被缓存时
document.attachEvent("onreadystatechange", function() {
if (document.readyState == "complete") {
document.detachEvent("onreadystatechange", arguments.callee);
domReady.fireReady();
}
});
(function(){
if (domReady.isReady) {
return;
}
// doScroll存在于所有标签而不管其是否支持滚动条
// 这里如果用document.documentElement.doScroll(),我们需要判定其是否位于顶层document
var node = new Image();
try {
node.doScroll();
node = null; // 防止IE内存泄漏
}catch (e) {
// javascrpt最短时钟间隔为16ms,这里取其倍数
setTimeout(arguments.callee, 64);
return;
}
domReady.fireReady();
})();
}
return domReady;
}()),
/**
* requestAnimationFrame兼容性扩展,两方面工作:
* 1、把各浏览器前缀进行统一
* 2、在浏览器没有requestAnimationFrame方法时将其指向setTimeout方法
* */
requestAnimationFrame: (function() {
var func = null;
var lastTime = 0;
var vendors = ["webkit", "moz"];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
func = window[vendors[x] + "RequestAnimationFrame"];
}
if (!func) {
func = function(callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
var id = window.setTimeout(function() {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
}
return func;
}()),
// 取消AnimationFrame
cancelAnimationFrame: (function() {
var func = null;
var vendors = ["webkit", "moz"];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
// Webkit中此取消方法的名字变了
window.cancelAnimationFrame = window[vendors[x] + "CancelAnimationFrame"] || window[vendors[x] + "CancelRequestAnimationFrame"];
}
if (!func) {
func = function(id) {
window.clearTimeout(id);
};
}
return func;
}())
};
}());
参考
commonJS — 全局操作(for Window)的更多相关文章
- Vue2.0 - 全局操作 Vue.set
引:http://www.cnblogs.com/zccblog/p/7192420.html Vue.set 的作用就是在构造器外部操作构造器内部的数据.属性或者方法.比如在vue构造器内部定义了一 ...
- Vue2.0 【第二季】第3节 Vue.set全局操作
目录 Vue2.0 [第二季]第3节 Vue.set全局操作 第3节:Vue.set全局操作 一.引用构造器外部数据 二.在外部改变数据的三种方法: 三.为什么要有Vue.set的存在? Vue2.0 ...
- commonJS — 浏览器操作(for Browser)
for Browser github: https://github.com/laixiangran/commonJS/blob/master/src/forBrowser.js 代码 /** * C ...
- WPF Touch操作滚动条,Window弹跳
WPF,用ScrollViewer控件,触屏开发,当滑动到最后时会使整个窗体弹跳一下 原因是因为ScrollViewer触屏操作原生支持惯性,ScrollViewer中的内容滚动到边界是会自动触发Wi ...
- JavaScript的DOM操作。Window.document对象
间隔执行一段代码:window.setlnteval("需要执行的代码",间隔毫秒数) 例 : window.setlnteval("alert("你 ...
- commonJS — 字符串操作(for String)
for String github: https://github.com/laixiangran/commonJS/blob/master/src/forString.js 代码 /** * Cre ...
- commonJS — 对象操作(for Object)
for Object github: https://github.com/laixiangran/commonJS/blob/master/src/forObject.js 代码 /** * Cre ...
- commonJS — 数字操作(for Number)
for Number github: https://github.com/laixiangran/commonJS/blob/master/src/forNumber.js 代码 /** * Cre ...
- commonJS — 函数操作(for Function)
for Function github: https://github.com/laixiangran/commonJS/blob/master/src/forFunction.js 代码 /** * ...
随机推荐
- 2016 Al-Baath University Training Camp Contest-1 J
Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...
- 2016年10月26日 星期三 --出埃及记 Exodus 19:10-11
2016年10月26日 星期三 --出埃及记 Exodus 19:10-11 And the LORD said to Moses, "Go to the people and consec ...
- spring容器启动过程
1.AbstractApplicationContext的prepareRefresh()方法调用. 2.XmlBeanDefinitionReader的loadBeanDifinitions(Bea ...
- Struts2框架的运行流程
Struts2的运行流程 1.浏览器发送请求到控制器(如Struts2中的核心控制器StrutsPrepareAndExecuteFilter): 2.控制器调用Action的execute方法: 3 ...
- 25-React事件处理及条件渲染
Handling Events React元素的事件处理非常类似于对DOM元素添加事件处理,但有一部分的语法不同: 1.React事件使用camelCase(驼峰命名法)来进行命名,而不是小写字母 2 ...
- Mysql压测工具mysqlslap 讲解
在mysql5.1以后的版本:客户端带了个工具mysqlslap可以对mysql进行压力测试: 可以使用mysqlslap --help来显示使用方法: Default options are rea ...
- 获取某个数据所在数据列表中的行数 mysql
select * from (select @rownum := @rownum+1 as rownum,goods_idfrom table_goods, (select @rownum:=0) t ...
- .Net操作音频
请选中您要保存的内容,粘贴到此文本框 此项目需求是针对.wav格式音频进行操作,转换成相应的.mp3格式的音频文件,对音频进行切割,最后以需求的形式输出,此篇会回顾运用到的一些知识点. 1.MDI子窗 ...
- BZOJ 2879 美食节(费用流-动态加边)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2879 题意:有n道菜,每道菜需要b[i]份,m个厨师,第j个厨师做第i道菜需要时间a[i ...
- SDP学习笔记
一.SDP规范了回话描述的格式,一般结合会话协议共同工作. 常见的会话传送协议包括:SAP(Session Announcement Protocol 会话公告协议),SIP,RTSP,HTTP,和使 ...