jQuery动画_动力节点节点Java学院整理


Posted in jQuery onJuly 04, 2017

用JavaScript实现动画,原理非常简单:我们只需要以固定的时间间隔(例如,0.1秒),每次把DOM元素的CSS样式修改一点(例如,高宽各增加10%),看起来就像动画了。

但是要用JavaScript手动实现动画效果,需要编写非常复杂的代码。如果想要把动画效果用函数封装起来便于复用,那考虑的事情就更多了。

使用jQuery实现动画,代码已经简单得不能再简化了:只需要一行代码!

让我们先来看看jQuery内置的几种动画样式:

show / hide

直接以无参数形式调用show()和hide(),会显示和隐藏DOM元素。但是,只要传递一个时间参数进去,就变成了动画:

var div = $('#test-show-hide');
div.hide(3000); // 在3秒钟内逐渐消失

时间以毫秒为单位,但也可以是'slow','fast'这些字符串:

var div = $('#test-show-hide');
div.show('slow'); // 在0.6秒钟内逐渐显示

toggle()方法则根据当前状态决定是show()还是hide()。

slideUp / slideDown

你可能已经看出来了,show()和hide()是从左上角逐渐展开或收缩的,而slideUp()和slideDown()则是在垂直方向逐渐展开或收缩的。

slideUp()把一个可见的DOM元素收起来,效果跟拉上窗帘似的,slideDown()相反,而slideToggle()则根据元素是否可见来决定下一步动作:

var div = $('#test-slide');
div.slideUp(3000); // 在3秒钟内逐渐向上消失

fadeIn / fadeOut

fadeIn()和fadeOut()的动画效果是淡入淡出,也就是通过不断设置DOM元素的opacity属性来实现,而fadeToggle()则根据元素是否可见来决定下一步动作:

var div = $('#test-fade');
div.fadeOut('slow'); // 在0.6秒内淡出

自定义动画

如果上述动画效果还不能满足你的要求,那就祭出最后大招:animate(),它可以实现任意动画效果,我们需要传入的参数就是DOM元素最终的CSS状态和时间,jQuery在时间段内不断调整CSS直到达到我们设定的值:

var div = $('#test-animate');
div.animate({
  opacity: 0.25,
  width: '256px',
  height: '256px'
}, 3000); // 在3秒钟内CSS过渡到设定值

animate()还可以再传入一个函数,当动画结束时,该函数将被调用:

var div = $('#test-animate');
div.animate({
  opacity: 0.25,
  width: '256px',
  height: '256px'
}, 3000, function () {
  console.log('动画已结束');
  // 恢复至初始状态:
  $(this).css('opacity', '1.0').css('width', '128px').css('height', '128px');
});

实际上这个回调函数参数对于基本动画也是适用的。

有了animate(),你就可以实现各种自定义动画效果了:

animate()

串行动画

jQuery的动画效果还可以串行执行,通过delay()方法还可以实现暂停,这样,我们可以实现更复杂的动画效果,而代码却相当简单:

var div = $('#test-animates');
// 动画效果:slideDown - 暂停 - 放大 - 暂停 - 缩小
div.slideDown(2000)
  .delay(1000)
  .animate({
    width: '256px',
    height: '256px'
  }, 2000)
  .delay(1000)
  .animate({
    width: '128px',
    height: '128px'
  }, 2000);
}
</script>

因为动画需要执行一段时间,所以jQuery必须不断返回新的Promise对象才能后续执行操作。简单地把动画封装在函数中是不够的。

为什么有的动画没有效果

你可能会遇到,有的动画如slideUp()根本没有效果。这是因为jQuery动画的原理是逐渐改变CSS的值,如height从100px逐渐变为0。但是很多不是block性质的DOM元素,对它们设置height根本就不起作用,所以动画也就没有效果。

此外,jQuery也没有实现对background-color的动画效果,用animate()设置background-color也没有效果。这种情况下可以使用CSS3的transition实现动画效果。

jQuery 相关文章推荐
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
jQuery选择器之子元素选择器详解
Sep 18 jQuery
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
jQuery 实现批量提交表格多行数据的方法
Aug 09 jQuery
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
jQuery实现简单轮播图效果
Dec 27 jQuery
jquery插件实现代码雨特效
Apr 24 jQuery
jQuery实现点击关注和取消功能
Jul 03 #jQuery
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 #jQuery
jquery实现一个全局计时器(商城可用)
Jun 30 #jQuery
jQuery表单设置值的方法
Jun 30 #jQuery
jQuery开源组件BootstrapValidator使用详解
Jun 29 #jQuery
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 #jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 #jQuery
You might like
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
php中session定期自动清理的方法
2015/11/12 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
Python zip函数打包元素实例解析
2019/12/11 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
乌鸦喝水教学反思
2014/02/07 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
考试没考好检讨书
2015/05/06 职场文书
党支部季度考核意见
2015/06/02 职场文书
员工离职证明范本
2015/06/12 职场文书
吃通javascript正则表达式
2021/04/21 Javascript