jQuery动画

2019-07-23  本文已影响0人  学的会的前端

展现和隐藏

 $('.target').hide();
//等同于 $('.target').css('display', 'none')
//原生JS写法node.style.display = 'none'
$('xxx').show()
//原生JS写法node.style.display = 'block'
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>

滑动

自定义动画

$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });
});
//多个动画的代码
$('#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()的区别

<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()
})
上一篇 下一篇

猜你喜欢

热点阅读