찾다

 >  Q&A  >  본문

javascript - 对于事先隐藏的元素设置 css3 动画疑问

对于事先在css中设置了display: none的元素,为其用transition进行动画效果时,需要先将其显示,再改变 class 类名

1

2

3

4

5

<code>ele.style.display = 'block';

setTimeout(function() {

  ele.classList.add('in');

}, 0);

</code>

我的做法是这样的,不过感觉好麻烦,尤其每次都要写一个 setTimeout
求赐教有什么更好的方法?

天蓬老师天蓬老师2906일 전510

모든 응답(6)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-10 14:55:59

    只能用visibility:hidden;来玩玩了,再配合opacity,创造fade-in fade-out的效果。
    至于兼容性处理,详见本文:http://www.greywyvern.com/?post=337#

    회신하다
    0
  • PHPz

    PHPz2017-04-10 14:55:59

    你可以写个函数封装它,或者不用diaplay: none,直接用opacity: 0来隐藏

    회신하다
    0
  • PHPz

    PHPz2017-04-10 14:55:59

    也许采用 animation 是一个好办法

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-10 14:55:59

    你可以封装一下,我现在用这个 https://gist.github.com/bammoo/33c5c797c76422a06cae:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    <code>/**

     * Shortcut for adding animation class name to dom element

     * @param  {string}   cls        class name

     * @param  {Function} cb         callback

     * @param  {Function}   lastItemCb  callback execute at last elment animated

     * @return {object}              this

     */

    $.fn.classAnimoEnd = function(cls, cb, lastItemCb) {

      var el = this;

     

      cb && (cb = $.proxy(cb, el));

     

      var count = $(el).length;

     

      $(el)

        .removeClass('animated ' + cls)

        .one($.support.animate.end, function () {

            cb && cb();

            $(el).removeClass('animated');

     

            if(count > 1) {

              count --;

     

              if(count === 0)

                lastItemCb && lastItemCb();

            }

          })

        .addClass('animated ' + cls);

     

      if(!$(el).css('display') !== 'none' )

        $(el).show();

     

      return this;

    }

    </code>

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:55:59

    这个简单啊,你把display:block这个 放到一个类里,和动画的特效放在同一个类不久ok了

    회신하다
    0
  • 迷茫

    迷茫2017-04-10 14:55:59

    隐藏一个元素的方法有很多种

    1. display: none
    2. visibility: hidden
    3. opacity: 0
    4. max-height: 0, overflow: hidden
      等等,我就不罗列了。

    这些方法中,有的是隐藏后不占据空间,有的要占据,有的是离散状态(没有transition),有的可以有transition。你根据你的需求,然后选择一种方式就好了,实在不能解决你要的动画,用jquery的animate吧。

    회신하다
    0
  • 취소회신하다