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;
}())
};
}());

参考

http://www.cnblogs.com/cloudgamer/

commonJS — 全局操作(for Window)的更多相关文章

  1. Vue2.0 - 全局操作 Vue.set

    引:http://www.cnblogs.com/zccblog/p/7192420.html Vue.set 的作用就是在构造器外部操作构造器内部的数据.属性或者方法.比如在vue构造器内部定义了一 ...

  2. Vue2.0 【第二季】第3节 Vue.set全局操作

    目录 Vue2.0 [第二季]第3节 Vue.set全局操作 第3节:Vue.set全局操作 一.引用构造器外部数据 二.在外部改变数据的三种方法: 三.为什么要有Vue.set的存在? Vue2.0 ...

  3. commonJS — 浏览器操作(for Browser)

    for Browser github: https://github.com/laixiangran/commonJS/blob/master/src/forBrowser.js 代码 /** * C ...

  4. WPF Touch操作滚动条,Window弹跳

    WPF,用ScrollViewer控件,触屏开发,当滑动到最后时会使整个窗体弹跳一下 原因是因为ScrollViewer触屏操作原生支持惯性,ScrollViewer中的内容滚动到边界是会自动触发Wi ...

  5. JavaScript的DOM操作。Window.document对象

    间隔执行一段代码:window.setlnteval("需要执行的代码",间隔毫秒数) 例 :      window.setlnteval("alert("你 ...

  6. commonJS — 字符串操作(for String)

    for String github: https://github.com/laixiangran/commonJS/blob/master/src/forString.js 代码 /** * Cre ...

  7. commonJS — 对象操作(for Object)

    for Object github: https://github.com/laixiangran/commonJS/blob/master/src/forObject.js 代码 /** * Cre ...

  8. commonJS — 数字操作(for Number)

    for Number github: https://github.com/laixiangran/commonJS/blob/master/src/forNumber.js 代码 /** * Cre ...

  9. commonJS — 函数操作(for Function)

    for Function github: https://github.com/laixiangran/commonJS/blob/master/src/forFunction.js 代码 /** * ...

随机推荐

  1. MDK中 use microlib

    microlib 与缺省 C 库之间的主要差异是: microlib 不符合 ISO C 库标准. 不支持某些 ISO 特性,并且其他特性具有的功能也较少. microlib 不符合 IEEE 754 ...

  2. tomcat异常: Cannot get a connection, pool exhausted

    1 问题描述Web程序在tomcat刚开始运行时速度很快,但过一段时间后发现速度变得很慢. 检查日志输出,发现异常如下:org.apache.commons.dbcp.SQLNestedExcepti ...

  3. [Python]如何使用HtmlTestRunner让自动化测试报告内容更丰富

    简述 使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtestrunner 进行生成,但是默认提供的生成报告内容,并不能 ...

  4. windows下mysql自动定时备份bat

    @echo off : basedataset ip=192.168.12.41set user=rootset password=12456 set databaseName=test set /a ...

  5. ECharts开始

    为ECharts准备一个具备大小(宽高)的Dom(当然可以是动态生成的) //from echarts example <body> <div id="main" ...

  6. MySql中使用日期函数获取昨天的数据

    .body-classic{ color:#444; font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Rom ...

  7. webAPI获得链接客户端IP地址

    public static class HttpRequestMessageExtensions { private const string HttpContext = "MS_HttpC ...

  8. LINUX DIFF命令详解

    刚才在和公司做离线IP对比,最后手工了,感觉还是比较麻烦的,遇到数据很大的时候不能手工进行了 本想用linux下的DIFF来进行对比,发现结果很乱.时间很紧最后还是手工了. 现在忙完要认认真真学习一下 ...

  9. genome MuSic安装

    系统:ubuntu 15.04全程在root权限下安装 首先安装软件samtools ,必须是samtools-0.1.19 版本tar jxf samtools-0.1.19.tar.bz2cd s ...

  10. Deep Learning: Activation Function

    Sigmoid Function ReLU Function Tanh Function