zepto的ready方法
zepto中的ready函数是作为$.fn的一个方法,即作为一个zepto对象的方法
readyRE = /complete|loaded|interactive/;
ready: function(callback){
// need to check if document.body exists for IE as that browser reports
// document ready when it hasn't yet created the body element
if (readyRE.test(document.readyState) && document.body) callback($)
else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
return this
},
ready返回的是this,即调用ready的自身对象。
一开始,对于采用if else语句不太了解,不清楚为什么要用两种方式调用回调函数。
在MDN中,有这样的描述:
document.readyState有三个值,分别为loading,interactive,completed.
当document文档正在加载时,返回"loading"。当文档结束渲染但在加载内嵌资源时,返回"interactive",并引发DOMContentLoaded事件。当文档加载完成时,返回"complete",并引发load事件.
DomApi也提供了两个相关事件,一个是上面的DOMContentLoaded,另一个是load事件。
所以在zepto中,必须检测document.readyState的值来判断下一步的进行的动作。
假如我们采用的是这样的语句:
ready: function(callback){
      // need to check if document.body exists for IE as that browser reports
      // document ready when it hasn't yet created the body element
      if (readyRE.test(document.readyState) && document.body)  document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
      return this
    },
那么可能出现一种情况,即document.readyState已经跳过了loading阶段,即文档已经结束渲染,并引发过DOMContentLoaded事件,那么下面的语句就不会执行。
代码测试:
<script type="text/javascript">
if(document.readyState == "loading")
document.addEventListener('DOMContentLoaded', function(){ console.log("It is OK!") }, false)
</script>
测试图:

测试代码:
if(document.readyState == "interactive" || document.readyState == "completed" )
document.addEventListener('DOMContentLoaded', function(){ console.log("It is OK!") }, false)
侧视图:没有输出。
zepto的ready方法的更多相关文章
- jquery和zepto的扩展方法extend
		jquery和zepto的扩展方法extend 总结下jQuery(3.1.1)和zepto(1.1.6)到底是如何来开放接口,使之可以进行扩展,两者都会有类型判断,本文使用简单的类型判断,暂不考虑兼 ... 
- (转载)jQuery 1.6 源码学习(二)——core.js[2]之extend&ready方法
		上次分析了extend方法的实现,而紧接着extend方法后面调用了jQuery.extend()方法(core.js 359行),今天来看看究竟core.js里为jQuery对象扩展了哪些静态方法. ... 
- jquery的ready方法(DOM是否加载完)详解与使用
		jquery的ready方法(准备DOM触发)还是比较复杂的,我们先看流程图: 
- $(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法
		$(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法接触JQuery一般最先学到的是何时启动事件.在曾经很长一段时间里,在页面载入后引发的事件 ... 
- 学习zepto.js(原型方法)
		学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ... 
- jQuery的ready方法实现原理分析
		jQuery中的ready方法实现了当页面加载完成后才执行的效果,但他并不是window.onload或者doucment.onload的封装,而是使用 标准W3C浏览器DOM隐藏api和IE浏览器缺 ... 
- jQuery中的ready方法及实现按需加载css,js
		模拟jQuery中的ready方法及实现按需加载css,js 一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的 ... 
- jquery ready方法实现原理 内部原理
		jquery ready方法实现原理 内部原理 今天闲来无事研究研究jquery.ready()的内部实现,看JQ的源码一头雾水,由于自己很菜了,于是翻了翻牛人的播客,讲述详细,收获颇多. 先普及一下 ... 
- 模拟jQuery中的ready方法及实现按需加载css,js
		一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的源码,涉及到的模块比较多,(水平有限)代码比较难看懂:自己结合 ... 
随机推荐
- 在windows下golang安装zmq3小记
			备忘这个 安装 TDM-GCChttp://tdm-gcc.tdragon.net/download 设置环境变量set C_INCLUDE_PATH=d:\DevTools\Zmq\ZeroMQ 3 ... 
- self_vs_default_definee_vs_receiver
			最近在学习ruby的过程遇到很多有趣的博客,随记录学习,这篇学习笔记摘自http://yugui.jp/articles/846 #self ruby中self无处不在,或是显示的调用或是隐含调用,方 ... 
- Debian 8.x / Ubuntu 16.04.x 搭建 Ghost 教程
			Ghost 是一款使用 Node.js 开发的博客系统,相对于使用 PHP 开发的 WordPress 更轻巧友好,所以本站已经从 WordPress 切换至 Ghost,本文介绍在 Debian 8 ... 
- 闵可夫斯基和(Mincowsky sum)
			一.概述 官方定义:两个图形A,B的闵可夫斯基和C={a+b|a∈A,b∈B}通俗一点:从原点向图形A内部的每一个点做向量,将图形B沿每个向量移动,所有的最终位置的并便是闵可夫斯基和(具有交换律) 例 ... 
- Linux系统安装 OpenSSL两种方法
			OpenSSL是一个开源的ssl技术,由于安装pytbull,需要安装openssl,并下载对应的版本下载地址:https://www.openssl.org/source/ 方法一,编译安装Open ... 
- .NET简单学习
			.NET是一个平台,对用户来说,只要下载了.NET Framework就可以运行.NET程序,获得需要的服务:对开发人员来说,平台对开发有着强有力的支持,方便创作各种应用软件. .NET Framew ... 
- Java并发编程实战
			代码中比较容易出现bug的场景: 不一致的同步,直接调用Thread.run,未被释放的锁,空的同步块,双重检查加锁,在构造函数中启动一个线程,notify或notifyAll通知错误,Object. ... 
- Openvswitch手册(3): sFlow, netFlow
			这一节,我们重点看sFlow 采样流sFlow(Sampled Flow)是一种基于报文采样的网络流量监控技术,主要用于对网络流量进行统计分析. sFlow系统包含一个嵌入在设备中的sFlow Age ... 
- centos7安装git踩坑记
			之前自己是按照Git 服务器搭建这篇博客来安装git服务器的,一步步顺序下来,但git clone的时候,每次都要求输入密码.说好的SSH免密登录呢.前后搞了一天多才搞定,现在记录下踩过的坑. 坑1: ... 
- C 线性表的链式存储实现及插入、删除等操作示例
			一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ... 
