简要:依赖fx.js,主要是针对show,hide,fadeIn,fadeOut的封装。

源码如下:

//  Zepto.js
// (c) 2010-2015 Thomas Fuchs
// Zepto.js may be freely distributed under the MIT license. ;(function($, undefined){
var document = window.document, docElem = document.documentElement,
origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle// origShow展示 origHide隐藏 origToggle展示隐藏开关 /**
* 便捷动画的核心方法
* @param el DOM
* @param speed 持续时间
* @param opacity 不透明度
* @param scale 缩放
* @param callback 回调
* @returns {*}
*/
// anim 主要针对缩放和透明度的过渡效果
// 对 animate方法的进一步的封装
function anim(el, speed, opacity, scale, callback) {
//修正参数 anim(el,callback)
if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
var props = { opacity: opacity }
if (scale) {
props.scale = scale
el.css($.fx.cssPrefix + 'transform-origin', '0 0') //设置变形原点
}
return el.animate(props, speed, null, callback)//不支持速率变化,
} /**
* 底层方法:隐藏显示的元素
* @param el
* @param speed
* @param scale
* @param callback
* @returns {*}
*/
// TODO 这里既然是hide的功能,为什么还要传入scale参数 ,这里有点多余
function hide(el, speed, scale, callback) {
//不透明度设为0,即完全透明,相当于隐藏元素。这里的原理是播放不透明-透明的过渡。
//具体代码为 $(dom).animate({opacity: 0, '-webkit-transform-origin': '0px 0px 0px', '-webkit-transform': 'scale(0, 0)' },800)
//设置了变形原点,缩放为0,它就会缩到左上角再透明
return anim(el, speed, 0, scale, function(){
origHide.call($(this)) //调用隐藏
callback && callback.call(this)
})
} /**
* 显示
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
$.fn.show = function(speed, callback) {
origShow.call(this)
//具体代码为 $(dom).animate({opacity: 1, '-webkit-transform-origin': '0px 0px 0px', '-webkit-transform': 'scale(1, 1)' },800)
//设置了变形原点,缩放为0,它就会缩到左上角再透明
if (speed === undefined) speed = 0
// TODO 这个if,else有点奇怪
else this.css('opacity', 0)
return anim(this, speed, 1, '1,1', callback)
} /**
* 隐藏
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
// TODO 为什么在上一不要封装出hide函数,难道其他地方有调用
$.fn.hide = function(speed, callback) {
if (speed === undefined) return origHide.call(this)
else return hide(this, speed, '0,0', callback)
} /**
* 显示、隐藏开关
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
$.fn.toggle = function(speed, callback) {
if (speed === undefined || typeof speed == 'boolean')
return origToggle.call(this, speed)
else return this.each(function(){
var el = $(this)
//这是toggle的关键逻辑
el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
})
} /**
* 淡入淡出
* 原理: $(dom).animate({opacity: 1/0, '-webkit-transform-origin': '0px 0px 0px'},800)
* @param speed 持续时间
* @param opacity 不透明度
* @param callback 回调函数
* @returns {*}
*/
// 淡入淡出总函数
$.fn.fadeTo = function(speed, opacity, callback) {
return anim(this, speed, opacity, null, callback)
} /**
* 淡入
* 原理: $(dom).animate({opacity: 1, '-webkit-transform-origin': '0px 0px 0px'},800)
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
$.fn.fadeIn = function(speed, callback) {
var target = this.css('opacity').
if (target > 0) this.css('opacity', 0)
else target = 1
// 首先显示,然后变不透明
return origShow.call(this).fadeTo(speed, target, callback)
} /**
* 淡出
* 原理: $(dom).animate({opacity: 0, '-webkit-transform-origin': '0px 0px 0px'},800)
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
// fadeOut 会将元素先变为透明,然后隐藏
$.fn.fadeOut = function(speed, callback) {
return hide(this, speed, null, callback)
} /**
* 淡入淡出开关
* @param speed 持续时间
* @param callback 回调函数
* @returns {*}
*/
$.fn.fadeToggle = function(speed, callback) {
return this.each(function(){
var el = $(this)
el[
(el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
](speed, callback)
})
} })(Zepto)

$.fn.show:

先调用原方法显示出来,如果参数有speed,callback则先让元素变透明调用anim逐步将元素显示出来,最后调用callback回调方法。

$.fn.hide:

和$.fn.show的过程相反,先调用anim将元素透明化,然后调用callback和原hide方法。当然,如果未传入参数,则直接隐藏。

$.fn.fadeIn:

首先将元素变为不透明,然后调用       origShow.call(this).fadeTo(speed,1, callback);

$.fn.fadeOut:

直接调用:  hide(this, speed, null, callback)   注:$.fn.hide也调用了hide方法,但不同的是$.fn.hide要求非但透明化,并且以(0,0)为中心scale缩为0。



zepto源码研究 - fx_methods.js的更多相关文章

  1. zepto源码研究 - deferred.js(jquery-deferred.js)

    简要:zepto的deferred.js 并不遵守promise/A+ 规范,而在jquery v3.0.0中的defer在一定程度上实现了promise/A+ ,因此本文主要研究jquery v3. ...

  2. zepto源码研究 - fx.js

    简要:zepto 提供了一个基础方法animate来方便我们运用css动画.主要针对transform,animate以及普通属性(例如left,right,height,width等等)的trans ...

  3. zepto源码研究 - callback.js

    简要:$.Callbacks是一个生成回调管家Callback的工厂,Callback提供一系列方法来管理一个回调列表($.Callbacks的一个私有变量list),包括添加回调函数, 删除回调函数 ...

  4. zepto源码研究 - ajax.js($.ajax具体流程分析)

    简要:$.ajax是zepto发送请求的核心方法,$.get,$.post,$.jsonp都是封装了$.ajax方法.$.ajax将jsonp与异步请求的代码格式统一起来,内部主要是先处理url,数据 ...

  5. zepto源码研究 - ajax.js($.ajaxJSONP 的分析)

    简要:jsonp是一种服务器和客户端信息传递方式,一般是利用script元素赋值src来发起请求.一般凡是带有src属性的元素发起的请求都是可以跨域的. 那么jsonp是如何获取服务器的数据的呢? j ...

  6. zepto源码研究 - ajax.js(请求过程中的各个事件分析)

    简要:ajax请求具有能够触发各类事件的功能,包括:触发全局事件,请求发送前事件,请求开始事件,请求结束事件等等,贯穿整个ajax请求过程,这是非常有用的,我们可以利用这些事件来做一些非常有意思的事情 ...

  7. zepto源码研究 - zepto.js - 1

    简要:网上已经有很多人已经将zepto的源码研究得很细致了,但我还是想写下zepto源码系列,将别人的东西和自己的想法写下来以加深印象也是自娱自乐,文章中可能有许多错误,望有人不吝指出,烦请赐教. 首 ...

  8. 读Zepto源码之fx_methods模块

    fx 模块提供了 animate 动画方法,fx_methods 利用 animate 方法,提供一些常用的动画方法.所以 fx_methods 模块依赖于 fx 模块,在引入 fx_methods ...

  9. 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二八║ Nuxt 基础:面向源码研究Nuxt.js

    前言 哈喽大家周五好,又是一个开开心心的周五了,接下来就是三天小团圆啦,这里先祝大家节日快乐咯,希望都没有加班哈哈,今天公司发了月饼,嗯~时间来不及了,上周应该搞个活动抽中几个粉丝发月饼的,下次吧,这 ...

随机推荐

  1. access数据库管理软件收集下载

    access百科 Microsoft Office Access是由微软发布的关系数据库管理系统.它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Mi ...

  2. Instruments 使用指南

    Instruments 用户指南 http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf 原著:Apple Inc ...

  3. Solr4.8.0源码分析(5)之查询流程分析总述

    Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...

  4. h.264加权预测

    帧间运动是基于视频亮度(luma)不发生改变的一个假设,而在视频序列中经常能遇到亮度变化的场景,比如淡入淡出.镜头光圈调整.整体或局部光源改变等,在这些场景中,简单帧间运动补偿的效果可想而知(实际编码 ...

  5. IC芯片設計

    IC從生產目的上可以分成為通用IC(如CPU,DRAM,接口芯片等)和ASIC(ApplicationSpecificIntegreted Circuit)兩種,ASIC是因應專門用途而生產的IC.  ...

  6. HTML5的在线视频播放方案

    移动端H5音频与视频问题及解决方案 看下最后实际效果:兼容PC,iphone, 安卓5.0 解决了,手动,自动,不全屏的问题 左边视频代替了动画,然后支持背景蒙板效果,能够透出底图 右边是原视频文件 ...

  7. 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错

    原文网址:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://download.csdn.net ...

  8. collapse

    1. border-collapse 该CSS属性用来设定表格的行和列的边框是合并成单边框,还是分别有各自的边框 separate 缺省值.边框分开,不合并. collapse 边框合并.即如果相邻, ...

  9. Spring 4.0 StandaloneMockMvcBuilder java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig 问题解决

    standaloneSetup(clrr). build(); 执行第二行 build() 时,出现下面的错误提示. java.lang.NoClassDefFoundError: javax/ser ...

  10. 【Html 学习笔记】第三节——超链接

    这一节看看超级链接的应用 普通超链接:<a href=""> <a> 第一个由于环境目前无法尝试,第二个点击后跳转到qq主页. 图片超链接:<imag ...