jquery动画,基础以及我发现的新大陆
$.animate()在jquery官方介绍有2中方式,其实我发现的新大陆也是第二种方式的扩展!
一、$.animate( properties [, duration ] [, easing ] [, complete ] )
参数介绍([]包裹的参数可省略)
properties
类型: PlainObject
一个CSS属性和值的对象,动画将根据这组对象移动。
duration (默认:
400
)类型: Numberor String
一个字符串或者数字决定动画将运行多久。(注:默认值: "normal", 三种预定速度的字符串("slow", "normal", 或 "fast")或表示动画时长的毫秒数值(如:1000) )
easing (默认:
swing
)类型: String
一个字符串,表示过渡使用哪种缓动函数。(注:jQuery自身提供"linear" 和 "swing")。
这个速度函数可以自定义,后面有介绍。
complete
类型: Function()
在动画完成时执行的函数。
举2个例子吧!
示例代码:
$(".btn2").click(function(){
$("#btn2").animate({height:"300px"},2000,'swing',function(){alert('hello world')});
});
示例代码:
$(".btn1").click(function(){
$("#btn1").animate({height:"300px"});
});
二、$.animate( properties, options )
properties
类型: PlainObject
一个CSS属性和值的对象,动画将根据这组对象移动。
- options类型: PlainObject一组包含动画选项的值的集合。 支持的选项:
duration (default:
400
)Type: Numberor String
一个字符串或者数字决定动画将运行多久。(愚人码头注:默认值: "normal", 三种预定速度的字符串("slow", "normal", 或 "fast")或表示动画时长的毫秒数值(如:1000) )
easing (default:
swing
)Type: String
一个字符串,表示过渡使用哪种缓动函数。(愚人码头注:jQuery自身提供"linear" 和 "swing",其他效果可以使用jQuery Easing Plugin插件)
queue (default:
true
)Type: Boolean or String
一个布尔值,指示是否将动画放置在效果队列中。如果为false时,将立即开始动画。 从jQuery1.7开始,队列选项也可以接受一个字符串,在这种情况下,在动画被添加到由该字符串表示的队列中。当一个自定义的队列名称被使用,动画不会自动启动;你必须调用
.dequeue("queuename")
来启动它。specialEasing
Type: PlainObject
由此方法的第一个参数properties定义的一个或多个CSS属性,及其相应的缓动函数组成的键值对map。( 1.4 新增)
step
Type: Function( Number now, Tween tween )
每个动画元素的每个动画属性将调用的函数。这个函数为修改Tween 对象提供了一个机会来改变设置中得属性值。
progress
Type: Function( Promiseanimation, Numberprogress, NumberremainingMs )
每一步动画完成后调用的一个函数,无论动画属性有多少,每个动画元素都执行单独的函数。 (version added: 1.8)
complete
Type: Function()
在动画完成时执行的函数。
done
Type: Function( Promiseanimation, BooleanjumpedToEnd )
在动画完成时执行的函数。 (他的Promise对象状态已完成). (version added: 1.8)
fail
Type: Function( Promiseanimation, BooleanjumpedToEnd )
动画失败完成时执行的函数。(他的Promise对象状态未完成)。 (version added: 1.8)
always
Type: Function( Promise animation, Boolean jumpedToEnd )
在动画完成或未完成情况下停止时执行的函数。(他的Promise对象状态已完成或未完成)。 (version added: 1.8)
这里有2个参数的应用要单独说明一下:
Step Function
第二个版本的.animate()
提供了一个step
选项- 每步动画执行后调用的回调函数。启用自定义动画类型或改变正在执行的动画,此功能是非常有用。它接受两个参数(now
和 fx
),this
是当前正在执行动画的DOM元素集合。
now
: 每一步动画属性的数字值fx
:jQuery.fx
原型对象的一个引用,其中包含了多项属性,比如elem
表示前正在执行动画的元素,start
和end
分别为动画属性的第一个和最后一个的值,prop
为进行中的动画属性。
Easing(缓动)
.animate()
还有一个参数是一个字符串命名的使用缓动函数。一个缓动函数指定用于动画进行中在不同点位的速度。 在jQuery库中是默认的时调用 swing
。在一个恒定的速度进行动画,请调用 linear
. 更多的缓动函数要使用的插件,或者自定义。
直接上代码:
$('#clickme').click(function() {
$('#test').animate({
width: 'toggle',
height: 'toggle'
}, {
duration: 5000,
specialEasing: {
width: 'linear',
height: 'swing'
},
complete: function() {
$(this).after('<div>Animation complete.</div>');
}
});
});
现在新大陆来了!
jQuery.easing = {
linear: function( p ) {
return p;
},
swing: function( p ) {
return 0.5 - Math.cos( p * Math.PI ) / 2;
}
};
这是jquery里animate的Easing源码!如果你觉得就linear和swing不能满足你的要求了,咋们可以扩展一些速度函数。
jQuery.extend(jQuery.easing, {
easeOutBounce: function (x, t, b, c, d) {
console.log(x);//0-1
console.log(t);//0-2500
console.log(b);//0
console.log(c);//1
console.log(d);//2500
// return t/1000;
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
} else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
} else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
} else {
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
}
},easeOutCubic: function (x, t, b, c, d) {
return c * ((t = t / d - 1) * t * t + 1) + b;
// return x;
}
})
现在Easing的值就多了2个选择:easeOutBounce和easeOutCubic。(不要问我这算法的问题,呵呵,我也是百度的!)
来,上代码试试看看咯!
$('.new').click(function() {
var ele = $("#new");
ele.css({ "left": "0", "top": "0", "transform": "rotateZ(0deg)" });
$({ left: 0, top: 0, tran: 0 }).animate({
left: 800, top: 180, tran:360
}, {
duration: 2500,
specialEasing: {
left: 'easeOutCubic',
top: 'easeOutBounce'
},
step: function () {
console.log(this.left);
ele.css({ "left": this.left + "px", "top": this.top + "px", "transform": "rotateZ(" + this.tran + "deg)" });
},
complete: function () {
console.log(this.left);
ele.css({ "left": "800px", "top": "180px", "transform": "rotateZ(360deg)" });
}
});
});
这种写法真是第一次见,就忍不住自己试了试,感觉还可以,就想写出来分享给大家!
其实就是自定义了一个动画速度函数!
我把本地的测试效果都移除了,还是把完整代码附给大家试试吧!
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>nick jq animate</title>
</head>
<body >
<button class="reset">重置样式</button>
<div id="btn1" class="nick" style="background-color:aqua;"><button class="btn1">btn1</button></div>
<div id="btn2" class="nick" style="background-color:#eee;"><button class="btn2">btn2</button></div>
<div id="test" class="nick"><button id="clickme">clickme</button><button class="btn2">btn2</button></div>
<div id="new" class="nick" style="width:200px;height:100px;background-color:cadetblue;position:absolute;"><button class="new">clickme</button></div>
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
<script>
$(".btn1").click(function(){
$("#btn1").animate({height:"300px"});
}); $(".btn2").click(function(){
$("#btn2").animate({height:"300px"},2000,'swing',function(){alert('hello world')});
}); $('#clickme').click(function() {
$('#test').animate({
width: 'toggle',
height: 'toggle'
}, {
duration: 3000,
specialEasing: {
width: 'linear',
height: 'swing'
},
complete: function() {
$(this).after('<div>Animation complete.</div>');
}
});
}); $('.new').click(function() {
var ele = $("#new").stop(true, false);
ele.css({ "left": "0", "top": "0", "transform": "rotateZ(0deg)" });
$({ left: 0, top: 0, tran: 0 }).animate({
left: 800, top: 180, tran:360
}, {
duration: 2500,
specialEasing: {
left: 'easeOutCubic',
top: 'easeOutBounce'
},
step: function () {
console.log(this.left);
ele.css({ "left": this.left + "px", "top": this.top + "px", "transform": "rotateZ(" + this.tran + "deg)" });
},
complete: function () {
console.log(this.left);
ele.css({ "left": "800px", "top": "180px", "transform": "rotateZ(360deg)" });
}
});
});
jQuery.extend(jQuery.easing, {
easeOutBounce: function (x, t, b, c, d) {
console.log(x);//0-1
console.log(t);//0-2500
console.log(b);//0
console.log(c);//1
console.log(d);//2500
// return t/1000;
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
} else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
} else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
} else {
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
}
},easeOutCubic: function (x, t, b, c, d) {
return c * ((t = t / d - 1) * t * t + 1) + b;
// return x;
}
}) $('.reset').click(function(){
$(".nick").css({ height:"" });
});
</script>
</body>
</html>
个人能力有限,只能写到这里了,希望对大家有所帮助,还望大家多多评论,指教!
jquery动画,基础以及我发现的新大陆的更多相关文章
- jquery动画基础
根据id改变字体大小的动画 <div class="speech">样式切换</div> <div id="switcher"&g ...
- 三、jQuery--jQuery基础--jQuery基础课程--第7章 jQuery 动画特效
1.调用show()和hide()方法显示和隐藏元素 show()和hide()方法用于显示或隐藏页面中的元素,它的调用格式分别为:$(selector).hide(speed,[callback]) ...
- jQuery动画特效实例教程
本文以实例形式详细讲述了jQuery动画特效的实现方法. 1.自制折叠内容块 内容块如下: <div class="module"> <div cla ...
- jQuery官方基础教程笔记(转载)
本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...
- css3动画和jquery动画使用中要注意的问题
前一阵子写demo的时候遇到这样一个问题,就是给元素添加css3或者jquery动画时,在动画结束前不能准确取到元素的css属性. 1. css3动画讨论 先看代码: html: <div id ...
- 炫丽的倒计时效果Canvas绘图与动画基础
前言 想要在自己做的网页中,加入canvas动画效果,但是发现模板各种调整不好,觉得还是要对canvas有所了解,才可以让自己的网页变得狂拽炫酷吊炸天! 一.绘制基础 1 <!DOCTYPE h ...
- jQuery动画使用总结
jQuery动画我用的比较多的仅仅只有show和hide,但是作为一个被我们大多数人所熟知的框架,相信他的动画功能还是比较多样的,这里做个小总结. 1.jQuery animate(),用于创建自定义 ...
- python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)
js总结 js: 1.ECMAScript5 ES5语法 2.DOM CRUD 获取 3种方式 id tag className //面向对象 对象 : 属性和方法 某个对象中 function $( ...
- jQuery 动画效果 与 动画队列
基础效果 .hide([duration ] [,easing ] [,complete ]) 用于隐藏元素,没有参数的时候等同于直接设置 display 属性 $('.target').hide() ...
随机推荐
- 工作总结_JS_1
获取点击下的相对应的div: $('> div', this).show(); 本身同级下的相对应的div: $('>div[name=vv]', $(this).siblings(& ...
- 第一章-第十五题(谈谈你对压力的看法,以及怎么和别人合作, 帮助别人,把压力转化为动力,在互相帮助的环境中成长。)--By林培文
压力是一把双刃剑,有害也有利,重点是如何看待压力,从而做到趋利避害,化压力为动力.对于当前的我来说,压力利大于弊.形成这一想法,我经历了好几个阶段.第一个阶段是小学时代,那会整天就知道玩,也没什么压力 ...
- js中的变量类型
js 中输出定义变量的类型 typeof 变量名. var u: --underfined类型 var s = "你是一个好人": --string类型 var n = ...
- java学习笔记(3)之面向对象(1)
下面来谈谈我对面向对象的一些理解和总结. 1.什么叫面向对象?我自己的理解就是一种编程思想,强调对象,是一种思考问题的思维模式.在学习面向对象的时候,我们要建立起自己面向对象的思维模式. (1).先整 ...
- Guava Supplier实例
今天想讲一下Guava Suppliers的几点用法.Guava Suppliers的主要功能是创建包裹的单例对象,通过get方法可以获取对象的值.每次获取的对象都为同一个对象,但你和单例模式有所区别 ...
- iTextSharp 116秒处理6G的文件
前言: 有一家印刷企业专为米兰新娘,微微新娘,金夫人这样的影楼印刷婚纱相册.通过一个B2B销售终端软件,把影楼的相片上传到印刷公司的服务器,服务器对这些图片进行处理. 比如: 1)为每个图片生成订单条 ...
- MyISAM和InnoDB
MyISAM和InnoDB MyISAM MyISAM使用B+tree作为索引结构,叶节点存放的是数据地址. MyISAM不支持事务和外键. MyISAM是表锁,对数据库写操作时会锁住整个表,效率低. ...
- C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!
序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...
- jws.mono脚本安装详解
就在最近两天,最新版本的jws.mono上线了,这个版本除了提供与之前版本拥有的功能外,还额外提供了一个“自动化”的安装脚本,通过执行该脚本,jws.mono将自动快速的安装到指定的目录,同时,通过改 ...
- Hadoop 裡的 fsck 指令
Hadoop 裡的 fsck 指令,可檢查 HDFS 裡的檔案 (file),是否有 corrupt (毀損) 或資料遺失,並產生 HDFS 檔案系統的整體健康報告.報告內容,包括:Total blo ...