简要:依赖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. lucene拼写检查模块

    Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块. 搜索拼写检查模块实现类在lucene-suggest-x.xx.x ...

  2. 浅谈Java内存泄露

    一.引言 先等等吧……累了

  3. 【HDOJ】1277 全文检索

    AC自动机,静态数组,动态分配TLE. /* 1277 */ #include <iostream> #include <cstdio> #include <cstrin ...

  4. BZOJ2718: [Violet 4]毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 229  Solved: 126[Submit][Status ...

  5. Delphi对ini文件的操作

    一.INI文件的结构:; 注释[小节名]关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. 值的类型有三种:字符串.整型数值和布尔值.其中字符串存贮在INI ...

  6. cryptopp开源库的使用(零):windows下使用visual studio编译

    编译相当简单:打开目录下的sln文件直接编译即可,官方支持到vc2012,我使用vs2013也没有错误,优秀的开源库总是便于使用. 编译的时候注意运行库得选择需要跟使用该库的保持一致,否则会出现重定义 ...

  7. 关于if语句后面的花括号

    两种写法.之前我比较2.总喜欢写了if语句后 不带 花括号.总感觉这样节省空间. 最后偶然看到google推荐的 才 顿悟到 这样虽然可以 但可读性不太好. 参考:https://source.and ...

  8. POJ 2718 穷举

    题意:给定一组数字,如0, 1, 2, 4, 6, 7,用这些数字组成两个数,并使这两个数之差最小.求这个最小差.在这个例子上,就是204和176,差为28. 分析:首先可以想到,这两个数必定是用各一 ...

  9. Redis需要你来做的算法优化

    阅读一个优秀的Server内核实现,早期的代码比后期的代码要好得多.因为在早期的代码里,你可以学习到一个黑客级别的程序猿到底在思考什么.同时,你能看到他哪里写得差劲,以及后来是怎么优化的. 如果你一心 ...

  10. C#中问号的使用

    1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空. 例如:string str=null; 是正确的,int i=null; 编译器就会报错. 为了使值 ...