深入学习jQuery自定义动画
前面的话
很多情况下,前面介绍的jQuery动画的简单效果无法满足用户的各种需求,那么就需要对动画有更多的限制,需要采取一些高级的自定义动画来解决这些问题。本文将详细介绍jQuery的自定义动画animate
属性对象
animate()方法的常规使用和之前介绍的3种常见动画的使用方法类似
animate(properties[,duration][,easing][,complete])
animate()方法的第一个参数是一个必须参数,表示一个CSS属性和值的对象,动画将根据这组对象移动
所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。例如,width、height或者left可以执行动画,但是background-color不能
当然,除了样式属性,一些非样式的属性,如scrollTop、scrollLeft以及自定义属性,也可应用于动画
下面以元素向右移动100px为例,此时需要将元素设置为定位元素
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'});
});
</script>
CSS简写属性(如font、background、border)没有得到充分的支持,只支持单一数值属性
[注意]中划线和小驼峰两种形式都可以使用
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">按钮一</button>
<button id="btn2">按钮二</button>
<button id="reset">恢复</button>
<div id="box" style="height: 100px;width: 300px;background-color: lightblue;border:1px solid black;">测试文字</div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'border-left-width':'20px'});
});
$('#btn2').click(function(event){
$('#box').animate({'borderLeftWidth':'20px'});
});
</script>
除了定义数值,每个属性能使用'show'、'hide'和'toggle',这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏
animate({opacity:'show'}) 相当于 fadeIn()
animate({opacity:'hide'}) 相当于 fadeOut()
animate({opacity:'toggle'}) 相当于 fadeToggle()
animate({opacity:'0.5'}) 相当于 fadeTo(0.5)
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">Toggle1</button>
<button id="btn2">Toggle2</button>
<div id="box" style="height: 100px;width: 300px;background-color: lightblue;border:1px solid black;">测试文字</div>
<script>
$('#btn1').click(function(event){
$('#box').animate({'opacity':'toggle'});
});
$('#btn2').click(function(event){
$('#box').fadeToggle();
});
</script>
animate({height:'show'}) 相当于 slideDown()
animate({height:'hide'}) 相当于 slideUp()
animate({height:'toggle'}) 相当于 slideToggle()
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">Toggle1</button>
<button id="btn2">Toggle2</button>
<div id="box" style="height: 100px;width: 300px;background-color: lightblue;border:1px solid black;">测试文字</div>
<script>
$('#btn1').click(function(event){
$('#box').animate({'height':'toggle'});
});
$('#btn2').click(function(event){
$('#box').slideToggle();
});
</script>
show()、hide()、toggle()方法不添加参数时,将没有动画效果
animate({height:'show',width:'show',opacity:'show'}) 相当于show(400)
animate({height:'hide',width:'hide',opacity:'hide'}) 相当于hide(400)
animate({height:'toggle',width:'toggle',opacity:'toggle'}) 相当于toggle(400)
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">Toggle1</button>
<button id="btn2">Toggle2</button>
<div id="box" style="height: 100px;width: 300px;background-color: lightblue;border:1px solid black;">测试文字</div>
<script>
$('#btn1').click(function(event){
$('#box').animate({height:'toggle',width:'toggle',opacity:'toggle'}) ;
});
$('#btn2').click(function(event){
$('#box').toggle(400);
});
</script>
动画属性也可以是一个相对值。如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">增加</button>
<button id="btn2">减少</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'width':'+=100'});
});
$('#btn2').click(function(event){
$('#box').animate({'width':'-=100'});
});
</script>
如果第一个参数对象中存在多种值,则表示该元素将同时执行多个动画
[注意]属性值的单位默认是像素px,其他单位如em和%需要指定使用
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px','width':'100'});
});
</script>
如果要按照顺序执行多个动画,而不是同时执行动画,则只需要把代码拆开,然后按照顺序写就可以了
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'});
$('#box').animate({'width':'100px'});
});
</script>
可选参数
animate(properties[,duration][,easing][,complete])方法中除了第一个属性对象是必需参数,其余参数都是可选参数。接下来,介绍animate()方法的可选参数
持续时间
animate()方法的第二个参数持续时间,用一个字符串或者数字决定动画将运行多久。默认值为"normal",有三种预定速度的字符串"slow"、"normal"、"fast"分别表示600ms、400ms和200ms
[注意]如果要自定义持续时间,需要设置为数字(如400),而不要设置为字符串'400',否则将不生效
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<style>
li{text-decoration: underline; margin-top: 2px;}
</style>
<ul id="con" style="display:inline-block;width:100px;cursor:pointer;margin:0;padding: 0;list-style:none;">
<li>fast</li>
<li>normal</li>
<li>slow</li>
<li>100</li>
<li>1000</li>
</ul>
<button id="reset">恢复</button>
<div id="box" style="position:relative;display:inline-block;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#con li').click(function(){
var value = $(this).html();
$('#box').animate({left:100},isNaN(Number(value)) ? value:Number(value))
})
</script>
动画效果
动画效果easing是第二个可选参数,表示过渡使用哪种缓动函数。jQuery自身提供"linear"和"swing",其他可以使用相关的插件,其中默认值为swing
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<style>
li{text-decoration: underline; margin-top: 2px;}
</style>
<ul id="con" style="display:inline-block;width:100px;cursor:pointer;margin:0;padding: 0;list-style:none;">
<li>swing</li>
<li>linear</li>
</ul>
<button id="reset">恢复</button>
<div id="box" style="position:relative;display:inline-block;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#con li').click(function(){
$('#box').animate({'left':'200'},1000,$(this).html())
})
</script>
回调函数
回调函数是第三个可选参数,表示动画完成时执行的函数
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'},function(){
alert(1);
});
});
</script>
选项参数
animate()方法的另一种用法是使用选项参数options
animate(properties,options)
使用选项参数时,animate()方法的第一个参数仍然是属性对象,第二个参数是一组包含动画选项的值的集合。支持以下选项:
【1】duration(default:400)
duration参数表示一个字符串或者数字决定动画将运行多久
【2】easing(default:swing)
easing参数表示过渡使用哪种缓动函数
【3】complete
complete参数表示在动画完成时执行的函数
【4】queue(default:true)
queue参数表示是否将动画放置在效果队列中,如果为false时,将立即开始动画
从jQuery1.7开始,该项也可以接受一个字符串,表示动画被添加到由该字符串表示的队列中
【5】specialEasing
specialEasing参数表示由animate()方法的第一个参数properties定义的一个或多个CSS属性,及其相应的缓动函数组成的键值对map
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px','width':'100px'},{
specialEasing:{
left:'linear',
width:'swing'
}
});
});
</script>
【6】step
step参数表示每个动画元素的每个动画属性将调用的函数
step参数接受两个参数(now和fx),this表示当前正在执行动画的DOM元素集合
其中,now表示每一步动画属性的数字值,而fx是jQuery.fx原型对象的一个引用,其中包含了多项属性,比如elem表示前正在执行动画的元素,start和end分别为动画属性的第一个和最后一个的值,prop为进行中的动画属性
[注意]step函数被每个动画元素的每个动画属性调用
以下代码中,通过设置第0个div元素的step参数,使其余div元素也进行相同的运动
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">按钮</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<div style="position:relative;height: 100px;width: 300px;background-color: lightyellow"></div>
<div style="position:relative;height: 100px;width: 300px;background-color: lightgreen"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'},
{
step:function(now,fx){
$('div').css('left',now)
}
});
});
</script>
深入学习jQuery自定义动画的更多相关文章
- Jquery 自定义动画同步进行如何实现?
需求描述:我需要对不懂的两个HTML对象进行操作,同时开始动画,同时结束动画. 遇到问题:如果先后对连个对象进行 animate动画,那么第一个会先运行,等第一个运行完了运行第二个,这样就不同步了. ...
- js进阶 13-4 jquery自定义动画animate()如何使用
js进阶 13-4 jquery自定义动画animate()如何使用 一.总结 一句话总结:animate(params,[speed],[easing],[fn]),参数:params:一组包含作为 ...
- 深入学习jQuery自定义插件
原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数); $(‘#id’).myPlugin(o ...
- jQuery 自定义动画效果
<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js&qu ...
- Jquery自定义动画与动画队列
animate:自定义动画 $(selector).animate({params},[speed],[easing],[callback]); params:要执行动画的css属性,它是一个对象可以 ...
- jQuery——自定义动画
动画方法:animate(json,1000, function (){}) 参数说明:json代表属性设置,1000是动画时间,最后一个是回调函数,其中动画时间可选 属性支持:http://www. ...
- jQuery自定义动画
$(function(){ $(".btn1").click(function(){ $(','opacity':'toggle'}); }); $(".btn2&quo ...
- python全栈开发day48-jqurey自定义动画,jQuery属性操作,jQuery的文档操作,jQuery中的ajax
一.昨日内容回顾 1.jQuery初识 1).使用jQuery而非JS的六大理由 2).jQuery对象和js对象转换 3).jQuery的两大特点 4).jQuery的入口函数三大写法 5).jQu ...
- jQuery Easing动画效果扩展(转)
jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...
随机推荐
- js基础3
内置对象 内置对象就是JS提供的一套工具箱,我们通过内置可以很方便的进行一些操作. Math对象: Math.ceil() //向上取整,天花板 Math.floor() //向下取整,地板 Math ...
- oracle遍历表更新另一个表(一对多)
declare cursor cur_test is select t.txt_desig, m.segment_id, s.code_type_direct, case when s.uom_dis ...
- 向mysql中插入Date类型的数据
先看数据库表的定义 date字段为sql.date类型.我要向其中插入指定的日期和当前日期. 一.插入当前日期 思路:先获取当前系统,在将当前系统时间转换成sql类型的时间,然后插入数据库.代码如下 ...
- easyui-conbotree树形下拉框。。。转
最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...
- webform 分页
界面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx ...
- 【转】Polya定理
转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...
- Delphi自己隐藏自定义弹出列表
先上代码 procedure TForm3.Timer1Timer(Sender: TObject); var Point: TPoint; Name: array[0..255] of Char; ...
- .NET的Actor模型:Orleans
Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSou ...
- 简单的jQuery幻灯片实现
一.一些抱怨 自从国庆放假上班以来,又是忙碌的工作直到现在,但是说忙好像也没有加几天班,只是上班的时候工作排的挺满.但是别人貌似一直都不太忙(也是我自己觉得),感觉就很不爽. 我喜欢快速做完一件事,然 ...
- EQueue - 一个纯C#写的分布式消息队列介绍2
一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue ...