Zepto.js实现fadeIn,fadeOut功能
Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api。 如果你会用jquery,那么你也会用zepto。
Zepto的设计目的是提供 jQuery 的类似的API,但并不是100%覆盖 jQuery 。所以会有些jQuery的动画功能Zepto实现不了,例如fade动画,但官方提供了解决办法,
主要是通过引入两个js插件:animate.js,zepto.animate.alias.js来实现完整的动画功能:
zepto.animate.alias.js:
/**
* zepto.animate.alias.js
*/
(function($) {
$.extend($.fn, {
fadeIn: function(speed, easing, complete) {
if(typeof(speed) === 'undefined') speed = 400;
if(typeof(easing) === 'undefined') {
easing = 'swing';
} else if(typeof(easing) === 'function') {
if(typeof(complete) === 'undefined') complete = easing;
easing = 'swing';
} $(this).css({
display: 'block',
opacity: 0
}).animate({
opacity: 1
}, speed, easing, function() {
// complete callback
complete && typeof(complete) === 'function' && complete();
}); return this;
},
fadeOut: function(speed, easing, complete) {
if(typeof(speed) === 'undefined') speed = 400;
if(typeof(easing) === 'undefined') {
easing = 'swing';
} else if(typeof(easing) === 'function') {
if(typeof(complete) === 'undefined') complete = easing;
easing = 'swing';
} $(this).css({
opacity: 1
}).animate({
opacity: 0
}, speed, easing, function() {
$(this).css('display', 'none');
// complete callback
complete && typeof(complete) === 'function' && complete();
}); return this;
},
fadeToggle: function(speed, easing, complete) {
return this.each(function() {
var el = $(this);
el[(el.css('opacity') === 0 || el.css('display') === 'none') ? 'fadeIn' : 'fadeOut'](speed, easing, complete)
})
}
})
})(Zepto);
animate.js:
(function($, undefined) {
    var prefix = '',
        eventPrefix,
        vendors = {
            Webkit: 'webkit',
            Moz: '',
            O: 'o'
        },
        testEl = document.createElement('div'),
        supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
        transform,
        transitionProperty, transitionDuration, transitionTiming, transitionDelay,
        animationName, animationDuration, animationTiming, animationDelay,
        cssReset = {}
    function dasherize(str) {
        return str.replace(/([A-Z])/g, '-$1').toLowerCase()
    }
    function normalizeEvent(name) {
        return eventPrefix ? eventPrefix + name : name.toLowerCase()
    }
    if(testEl.style.transform === undefined) $.each(vendors, function(vendor, event) {
        if(testEl.style[vendor + 'TransitionProperty'] !== undefined) {
            prefix = '-' + vendor.toLowerCase() + '-'
            eventPrefix = event
            return false
        }
    })
    transform = prefix + 'transform'
    cssReset[transitionProperty = prefix + 'transition-property'] =
        cssReset[transitionDuration = prefix + 'transition-duration'] =
        cssReset[transitionDelay = prefix + 'transition-delay'] =
        cssReset[transitionTiming = prefix + 'transition-timing-function'] =
        cssReset[animationName = prefix + 'animation-name'] =
        cssReset[animationDuration = prefix + 'animation-duration'] =
        cssReset[animationDelay = prefix + 'animation-delay'] =
        cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
    $.fx = {
        off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
        speeds: {
            _default: 400,
            fast: 200,
            slow: 600
        },
        cssPrefix: prefix,
        transitionEnd: normalizeEvent('TransitionEnd'),
        animationEnd: normalizeEvent('AnimationEnd')
    }
    $.fn.animate = function(properties, duration, ease, callback, delay) {
        if($.isFunction(duration))
            callback = duration, ease = undefined, duration = undefined
        if($.isFunction(ease))
            callback = ease, ease = undefined
        if($.isPlainObject(duration))
            ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
        if(duration) duration = (typeof duration == 'number' ? duration :
            ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
        if(delay) delay = parseFloat(delay) / 1000
        return this.anim(properties, duration, ease, callback, delay)
    }
    $.fn.anim = function(properties, duration, ease, callback, delay) {
        var key, cssValues = {},
            cssProperties, transforms = '',
            that = this,
            wrappedCallback, endEvent = $.fx.transitionEnd,
            fired = false
        if(duration === undefined) duration = $.fx.speeds._default / 1000
        if(delay === undefined) delay = 0
        if($.fx.off) duration = 0
        if(typeof properties == 'string') {
            // keyframe animation
            cssValues[animationName] = properties
            cssValues[animationDuration] = duration + 's'
            cssValues[animationDelay] = delay + 's'
            cssValues[animationTiming] = (ease || 'linear')
            endEvent = $.fx.animationEnd
        } else {
            cssProperties = []
            // CSS transitions
            for(key in properties)
                if(supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
            else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
            if(transforms) cssValues[transform] = transforms, cssProperties.push(transform)
            if(duration > 0 && typeof properties === 'object') {
                cssValues[transitionProperty] = cssProperties.join(', ')
                cssValues[transitionDuration] = duration + 's'
                cssValues[transitionDelay] = delay + 's'
                cssValues[transitionTiming] = (ease || 'linear')
            }
        }
        wrappedCallback = function(event) {
            if(typeof event !== 'undefined') {
                if(event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
                $(event.target).unbind(endEvent, wrappedCallback)
            } else
                $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout
            fired = true
            $(this).css(cssReset)
            callback && callback.call(this)
        }
        if(duration > 0) {
            this.bind(endEvent, wrappedCallback)
            // transitionEnd is not always firing on older Android phones
            // so make sure it gets fired
            setTimeout(function() {
                if(fired) return
                wrappedCallback.call(that)
            }, ((duration + delay) * 1000) + 25)
        }
        // trigger page reflow so new elements can animate
        this.size() && this.get(0).clientLeft
        this.css(cssValues)
        if(duration <= 0) setTimeout(function() {
            that.each(function() {
                wrappedCallback.call(this)
            })
        }, 0)
        return this
    }
    testEl = null
})(Zepto);
Zepto.js实现fadeIn,fadeOut功能的更多相关文章
- 原生JS实现购物车结算功能代码+zepto版
		
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
 - zepto.js
		
// Zepto.js// (c) 2010-2016 Thomas Fuchs// Zepto.js may be freely distributed under the MIT license. ...
 - 学习zepto.js(对象方法)[3]
		
继续说zepto里attributes的相关操作. attr,removeAttr,prop这三个方法. attr(): 三种用途 get: 返回值为一个string字符串 $("<s ...
 - 移动开发js库Zepto.js应用详解
		
从哪里下载 Zepto 地址:http://zeptojs.com/ 中文版地址:http://www.css88.com/doc/zeptojs_api/ 这个问题看起来很蠢,从官网下载不就行了嘛! ...
 - 学习zepto.js(原型方法)
		
学习zepto.js(原型方法)[1] 转载 新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): ...
 - zepto.js的基本介绍与使用
		
最近看到了一篇文章,是介绍一种新的js框架,名为zepto.js,他适用于移动设备已经桌面浏览器除了ie系列的.. 他兼容jquery的API,所以学起来或用起来并不吃力.他比jquery的优势在于1 ...
 - Zepto.js入门介绍
		
GitHub Zepto Zepto的一些可选功能是专门针对移动端浏览器的:因为它的最初目标在移动端提供一个精简的类似jquery的js库. Zepto不支持旧版本的Internet Explorer ...
 - zepto.js swipe实现触屏tab菜单
		
今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...
 - 怎么使用zepto.js的tap事件引起的探索
		
前言: 在使用zepto.js之前,你首先要知道它是什么?为什么要使用它?以及它和jquery有什么区别? ①:简单来说zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与j ...
 
随机推荐
- msyql null 引起的错误
			
mysql 默认值不要为null,最好为空 否则,当你查询的时候,会引起一些异常 比如 select * from a where b!='new' 假设有一条数据b=null,你是查询不出来的 解 ...
 - hdu1018--斯特灵公式
			
斯特灵公式 Wiki http://zh.wikipedia.org/wiki/斯特林公式 /** \brief hdu 1018 * * \param date 2014/7/24 * \param ...
 - eclipse导入myeclipse中的web项目
			
场景:在myeclipse编写的一个简单的电信计费系统项目,后面公用到eclipse,想把它给导入到eclipse中 操作:eclipse中在packag explorer空白处右键>impor ...
 - Windows下搭建ffmpeg+VS2008开发环境详细教程【转】
			
本文转载自:http://www.voidcn.com/article/p-vxdntdgc-bkq.html 由于个人是从事音视频开发相关的工作,所以也把自己的一些过程写下来,方便大家以及自己查看, ...
 - python程序中用类变量代替global 定义全局变量
			
在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题. 比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码 ...
 - POJ 2492 A Bug's Life 带权并查集
			
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...
 - 查看 myeclipse激活状态
			
查看激活状态 myeclipse-->subscription information
 - spring-boot结合mybatis-spring的一个例子
			
首先spring-boot是用于简化配置的,具有可拔式组件的运用特点. 然后一下是spring-boot结合mybatis-spring的一个例子. 是一个maven项目 demo下载:http:// ...
 - lua环境变量
			
function foo() print(g or "'g' is not defined!") end foo() env = { g = 100, print = print ...
 - How to share memory between services and user processes?
			
除了必要的InitializeSecurityDescriptor和SetSecurityDescriptorDacl, 内存映射文件名必须GLOBAL开头.