zepto.js动画源码

;(function($, undefined){
var prefix = ‘‘, eventPrefix, endEventName, endAnimationName,
vendors = { Webkit: ‘webkit‘, Moz: ‘‘, O: ‘o‘ },
document = window.document, 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])([A-Z])/, ‘$1-$2‘).toLowerCase() }
function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }

$.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 * 1000) + 25)
}

// trigger page reflow so new elements can animate
this.size() && this.get(0).clientLeft

this.css(cssValues)

if (duration zepto.js动画源码

时间: 2024-10-14 20:08:24

zepto.js动画源码的相关文章

学会读JQuery等JS插件源码

很多人觉得jquery.ext等一些开源js源代码 十分的晦涩,读不懂,遇到问题需要调试也很费劲.其实我个人感觉主要是有几个方面的原因: 1.对一些js不常用的语法.操作符不熟悉 2.某个function中又嵌套了一些内部的function,使得整个代码的层次结构不像java代码那么清晰. 3.js中允许变量先使用后定义,会造成我们看代码时候忽然冒出来一个变量.function,却找不到是在哪里定义的. 那么今天给大家分享一下我的经验,扫清你的障碍. 一.一些晦涩的操作符: 1.(functio

8个超震撼的HTML5和纯CSS3动画源码

HTML5和CSS3之所以强大,不仅因为现在大量的浏览器的支持,更是因为它们已经越来越能满足现代开发的需要.Flash在几年之后肯定会消亡,那么HTML5和CSS3将会替代Flash.今天我们要给大家分享8个最新的HTML5和纯CSS3动画及其源码,这些动画非常让人震撼,你也可以学习一下HTML5源码. 1.HTML5 Canvas水波纹动画特效 HTML5的Canvas特性非常实用,我们不仅可以在Canvas画布上绘制各种图形,也可以制作绚丽的动画,比如这次介绍的水波纹动画特效.以前我们也分享

[百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码

MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是否在一个圆圈内,生活服务查询,从经纬度获取地址信息,地图工具包括测距,获取面积,以积打印地图,地图全屏,实时路况,坐标是否在polygon区域内,打车方案,经过中间途经点,添加地图控件: 界面查看 : http://www.cnblogs.com/ed

10款web前端基于Jquery的动画源码

1.使用 CSS3 动感的图片标题动画效果 在网站中,有很多地方会需要在图片上显示图片标题.使用 CSS3 过渡和变换可以实现动感的鼠标悬停显示效果.没有使用 JavaScript,所以只能在支持 CSS3 动画的现代浏览器中才能正常工作.您可以查看网页的源代码,了解动画是如何工作的. 在线演示 源码下载 2.简单的轻量级的 jQuery 仪表板插件 sDashboard 是一个轻量的仪表板 jQuery 插件,转换一个对象数组到仪表板.数组中的每个对象将被呈现为一个仪表板组件,可以通过左右拖

node.js require() 源码解读

时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS 格式.这种格式的核心就是 require 语句,模块通过它加载.学习 Node.js ,必学如何使用 require 语句.本文通过源码分析,详细介绍 require 语句的内部运行机制,帮你理解 Node.js 的模块机制. 一.require() 的基本用法分析源码之前,先介绍 require 语句的内部逻辑.如果你只想了解 require 的用法,只看这一段就够了.下面的

8个超炫酷仿HTML5动画源码

1.jQuery万年历插件 带农历老皇历功能 这是一款基于jQuery的日历插件,这款日历插件和之前分享的日历控件有很大差异,它是一本万年历,包含了农历已经老皇历的功能,是一个挑好日子的工具.同时日历还可以查看本年度的放假安排,功能非常强大.有兴趣的朋友可以下载学习. 在线演示 源码下载 2.CSS3发光进度条动画 超炫酷的样式 这次我们要来分享一款非常炫酷的CSS3进度条动画,其样式风格类似于星球大战里面的那些激光剑效果.页面初始化时,可以设定进度条的值,但是我们也可以利用其配套的借口来动态改

Android 属性动画 源码解析 深入了解其内部实现

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42056859,本文出自:[张鸿洋的博客] 1.概述 Android中想做很炫酷的动画效果,相信在很多时候你都可以选择使用属性动画,关于属性动画如何使用,我们已经很详细的写过两篇博客讲解.如果你还不了解,请参考: Android 属性动画(Property Animation) 完全解析 (上) Android 属性动画(Property Animation) 完全解析 (下)

android炫酷动画源码,QQ菜单、瀑布流、二维码源码

Android精选源码 自定义弹框封装,ProgressDialog,StatusDialog和Toast,支持自定义颜色 有深度感的fragment代码 在屏幕顶部或者底部显示提示 短信转发工具,自动转发短信到手机或邮箱 美观的菜单隐藏在主界面底部的抽屉导航. 仿QQ菜单.瀑布流.数据库.二维码生成 andorid实现"划词翻译"功能的项目 android界面切换的效果,输入文字时背景图缩放效果 android一款很炫的动画代码 Android雷达扫描图,超高仿QQ附近的人 Andr

在centos7上安装gcc、node.js(源码下载)

一.在centos7中安装node.js https://www.cnblogs.com/lpbottle/p/7733397.html 1.从源码下载Nodejs cd /usr/local/srcwget https://npm.taobao.org/mirrors/node/v8.7.0/node-v8.7.0.tar.gz 2.解压缩 nodejs 安装包 tar xvf node-v8.7.0.tar.gz 3.进入解压的node文件夹,安装必要的编译软件包 cd node-v8.7.