jQuery动画

展现和隐藏

  • .hide([duration ] [,easing ] [,complete ])
    用于隐藏元素,没有参数的时候等同于直接设置display属性。
 $('.target').hide();
//等同于 $('.target').css('display', 'none')
//原生JS写法node.style.display = 'none'
  • .show( [duration ] [, easing ] [, complete ] )
    用于显示元素,用法和hide类似.
$('xxx').show()
//原生JS写法node.style.display = 'block'
  • toggle( [duration ] [, easing ] [, complete ] )
    事件处理套件也有一个名为.toggle()方法。哪一个被调用取决于传递的参数的设置
    用来切换元素的隐藏、显示,类似于toggleClass,用法和show、hide类似.。如果这个元素以前是隐藏的,那么点击就是展示,如果是展示的,点击就会隐藏。
  • 相关参数含义:
1. duration:动画持续了多久
$('xxx').hide(1000) //用了1秒的时间去隐藏
2. easing:表示过渡使用哪种缓动函数,jQuery自身提供了'linear'和'swing'
//缓动函数就是指在变化的过程中是先快后面还是先慢后快等等,liner就是一个线性的变化
3. complete:在动画完成时执行的函数,是一个回调函数
$('xxx').hide(1000,function(){
  console.log('hide')
})
//动画执行完之后才会console.log出hide.

如果元素之前已经设置了display的值,那么变化的最终结果也会是这个设置的值,不会更改。比如div元素设置了display:inline-block,那么它hide之后再show的时候,最后的display还是inline-block。与原生Js比较,jQuery可以记住它原来的css属性。

<div class = "box" style = "display: inline-block">hello</div>
<button id = "btn-box1">hide</button>
<button id = "btn-box2">show</button>
<script>
$('#btn-box1').on('click',function(){
  $('.box').hide(5000)
})
$('#btn-box2').on('click',function(){
  $('.box').show(5000)
})
</script>
  • .fadeIn( [duration ] [, easing ] [, complete ] )
    通过淡入的方式显示匹配元素,参数含义和上面相同
  • .fadeOut( [duration ] [, easing ] [, complete ] )
    通过淡出的方式隐藏匹配元素
  • .fadeTo( duration, opacity [, easing ] [, complete ] )
    调整匹配元素的透明度,方法通过匹配元素的不透明度做动画效果
  • .fadeToggle( [duration ] [, easing ] [, complete ] )
    通过匹配的元素的不透明度动画,来显示或隐藏它们,方法执行匹配元素的不透明度动画。当被可见元素调用时,元素不透明度一旦达到0,display样式属性设置为none ,所以元素不再影响页面的布局。

滑动

  • .slideDown( [duration ] [, easing ] [, complete ] )
    用滑动动画显示一个匹配元素,方法将给匹配元素的高度的动画,这会导致页面的下面部分滑下去,弥补了显示的方式
  • .slideUp( [duration ] [, easing ] [, complete ] )
    用滑动动画隐藏一个匹配元素,方法将给匹配元素的高度的动画,这会导致页面的下面部分滑上去,当一个隐藏动画后,高度值达到0的时候,display 样式属性被设置为none,以确保该元素不再影响页面布局。 display 样式属性将被设置为none,以确保该元素不再影响页面布局。
  • .slideToggle( [duration ] [, easing ] [, complete ] )
    用滑动动画显示或隐藏一个匹配元素,方法将给匹配元素的高度的动画,这会导致页面中,在这个元素下面的内容往下或往上滑。display属性值保存在jQuery的数据缓存中,所以display可以方便以后可以恢复到其初始值。
    如果一个元素的display属性值为inline,然后是隐藏和显示,这个元素将再次显示inline。当一个隐藏动画后,高度值达到0的时候,display 样式属性被设置为none,以确保该元素不再影响页面布局。
  • slidedown,slideup的变化是有一个拉伸的效果,而hide()和show()的变化是整体的变大变小。

自定义动画

  • .animate( properties [, duration ] [, easing ] [, complete ] )
    properties是一个CSS属性和值的对象,动画将根据这组对象移动。
$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });
});
  • 没有动画的时候,我们可以使用css设置元素的样式,但是如果想把这个样式变化变成连贯的,那么就要使用animate,设置这个参数后,就会从初始状态变成设置的状态,这个过程是渐变的,不是一下子就变成的。
  • 写了动画的时候,不一定就会产生效果,也要和css相对应,例如想要实现移动效果,设置了top和left的值,要在原元素上添加position:relative,否则就算是设置了top或者left也不会有移动效果。
//多个动画的代码
$('#btn').on('click',function(){
  $div3.animate({ },function(){
    //function 是一个回调,相当于动画完成之后要做的事情
    $div3.animate({ },function(){
      ....
    })
  })
})
/*就是第一个动画完成之后,执行第二个动画,第二个动画执行完成之后,
执行第三个动画。。。。有几个动画就要嵌套几次。但是这个嵌套次数太多,代码不是很好,


所以animate就做了一个封装,代码如下:*/
//jQuery的链式调用
$div3.animate({ }).animate({ }).animate({ }).....


//第二种方案
$div3.animate({ });
$div3.animate({ });
....
$div3.animate({},function(){
  ...
})


//第三种优化方案:
//把所有的样式放到一个数组里面,用animate遍历这个数组
var actions = [
  {width: 80,height: 80,left: 0,top:0},
  {left: '200px'},
  ......
]
actions.forEach(function(action,idx){
  $div3.animate(action)
})

jQuery的链式调用

$div.hide().show().css()
因为div.hide()这个函数执行完成之后,return的还是原来的jQuery对象div。所以还可以继续.show()等。
等价于

$div.hide()
    .show()

.stop()和.finish()的区别

  • .finish:停止当前动画,并清除动画队列中所有未完成的动画,最终展示动画队列最后一帧的最终状态。
  • .stop( [clearQueue ] [, jumpToEnd ] )
    停止当前正在运行的动画,若果当前队列没有执行完,点击stop,会立刻停止当前队列的执行。
<body>
  <button id="btn1">start</button>
  <button id="btn2">step+50</button>
  <button id="btn3">step-50</button>
  <button id="btn4">auto</button>
  <button id="btn5">reset</button>
  <button id="btn6">stop(false,false)</button>
  <button id="btn7">stop(true,false)</button>
  <button id="btn8">stop(true,true)</button>
  <button id="btn9">finish</button>
  
  <div class="container">
    <div class="box"></div>
  </div>
  
  <script>
    $('#btn1').click(function(){
      $('.box').animate({
        left: '100px'
      }, 1000)
    })
    $('#btn2').click(function(){
      $('.box').animate({
        left: '+=50'
      }, 1000)
    })
    $('#btn3').click(function(){
      $('.box').animate({
        left: '-=50'
      }, 1000)
    })
    $('#btn4').click(function(){
      $('.box').animate({
        left: '100px'
      }, 1000)
      $('.box').animate({
        left: '100px',
        top: '100px'
      }, 1000)
      $('.box').animate({
        left: '0',
        top: '100px'
      }, 1000)
      $('.box').animate({
        left: '0',
        top: '0'
      }, 1000)
    })
    $('#btn5').click(function(){
      $('.box').animate({
        left: 0,
        top: 0
      }, 1000)
    })
    $('#btn6').click(function(){
      //停止当前动画
      $('.box').stop()
    })
    $('#btn7').click(function(){
      //停止当前动画,并清除未执行的动画队列
      $('.box').stop(true, false)
    })
    $('#btn8').click(function(){
      //停止当前动画,并清除未执行的动画队列,并且当前动画展示最终状态
      $('.box').stop(true, true)
    })
    $('#btn9').click(function(){
      //停止当前动画,并清除未执行的动画队列,并且当前动画展示最终状态
      $('.box').finish()
    })

  </script>

.clearQueue

清除动画队列中未执行的动画。

slideToggle()

$('.ct .item').on('click',function(){
  $(this).find('p').slideToggle()
})
//当点击元素的时候,从当前元素里面找到p.
//若.item内的P元素的内容展示出来了,点击事件则会隐藏内容,若没有展现出来,点击事件则会展现内容。

如果想实现点击某一个p的时候,内容展现出来,但是其他p的内容要隐藏起来。或者点击P1的时候,p1的内容展现,但是点击p2的时候,P2d的内容展现,但是p1的消失,也就是p2的兄弟节点的内容都消息

$('.ct .item').on('click',function(){
  $(this).find('p').sildeDown()
  //兄弟节点都去掉
  $(this).siblings().find('p').slideUp()
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343