search

Home  >  Q&A  >  body text

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

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

ele.style.display = 'block';
setTimeout(function() {
  ele.classList.add('in');
}, 0);

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

天蓬老师天蓬老师2819 days ago457

reply all(6)I'll reply

  • PHP中文网

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

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

    reply
    0
  • PHPz

    PHPz2017-04-10 14:55:59

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

    reply
    0
  • PHPz

    PHPz2017-04-10 14:55:59

    也许采用 animation 是一个好办法

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:55:59

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

    /**
     * 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;
    }
    

    reply
    0
  • 伊谢尔伦

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

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

    reply
    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吧。

    reply
    0
  • Cancelreply