深入学习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,使用该插件可以实现直线匀速运功.变加速 ...
随机推荐
- 转:界面之下:还原真实的 MVC、MVP、MVVM 模式
前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...
- 基于shell脚本比较数字加减乘除
让用户输入两个数来比较他们的大小 先用touch命令新建一个2.sh文件 在用vi进入i进入编辑状态 输入 保存后检查
- #研发解决方案#iDB-数据库自动化运维平台
郑昀 创建于2015/12/2 最后更新于2015/12/2 关键词:数据库,MySQL,自动化运维,AutoDDL,刷库,帐号授权,审核,回滚 提纲: 数据库自动化运维什么?别人家是怎么玩的? 我们 ...
- asp.net mvc3登录验证
1,在web.config中 <system.web>节点下面增加: <authentication mode="Forms"> <forms na ...
- dubbo 常见错误
1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...
- 我的window10
前言 这个一时半会写不完,也比较耗费时间,留着以后,每周更新一些新的技巧. 折腾了3天多时间的成果——>window10 的全新桌面,不比苹果差!不要说 windows 不能用 mac . 既然 ...
- vscode过滤pyc文件
在工作区设置里添加如下代码: { "files.exclude": { "**/.git": true, "**/.svn": true, ...
- oracle统计用户下面所有的表,并显示每个表的行数
declare t_count number(10); t_str VARCHAR2(500); cursor t_tables is select table_name from user ...
- Kafka设计解析(二)- Kafka High Availability (上)
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/04/24/KafkaColumn2 摘要 Kafka在0.8以前的版本中,并不提供High Av ...
- Oracle EBS - Profile Setting
EBS Profile Setting (Personalization Basics): Personalization Basics For R12 Forms Enable personaliz ...