0

有没有比这更好的触发 css3 转换的方法,我认为这有点 hacky 或者这是每个人都这样做的方式?

假设我们有一个具有以下 css 的 div:

.box{
  position: fixed;
  top: 50%;
  left: 50%;
  margin: -50px 0px 0px -50px;

  width: 100px;
  opacity: 0;
  transition: opacity .3s ease-out;
}

.box.box-visible{
   opacity: 1;
}

现在我们得到了以下 jQuery:

$(function(){
    $('.box').addClass('box-visible');
});

这不会触发动画,所以当我们这样做时:

$(function(){
    var transition = setTimeout(function(){
        $('.box').addClass('box-visible');
    }, 1);
});

然后触发转换,但这不是有点hacky吗?还有其他解决方案吗?

感谢阅读我希望我的回答很清楚。

4

2 回答 2

0

请将此用于背景动画,它将支持所有浏览器示例:

div ul li a{background:url(../images/asso/arow.png) no-repeat left 0;}
div ul li a:hover{ background-position:0 -66px;} 




(function($) {
    $.extend($.fx.step,{
        backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
            }
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
    });
})(jQuery);



$(function(){
    $('ul li')
        .mouseover(function(){
            $(this).find('a').stop().animate({backgroundPosition:"(0 -66)"}, {duration:500})
        })
        .mouseout(function(){
            $(this).find('a').stop().animate({backgroundPosition:"(0 0)"}, {duration:500})
            })
        });
于 2012-05-14T11:07:46.100 回答
0

你只需要稍微修改你的代码......

  .box{
            position: fixed;
            top: 50%;
            left: 50%;
            margin: -50px 0px 0px -50px;
            width: 100px;
            border-width:thin;
            border-style:solid;
            background:red;
            opacity: 0;
            -moz-transition: opacity 3s ease-out;//for firefox  
            -o-transition: opacity 3s ease-out;// for opera  
            -webkit-transition: opacity 3s ease-out;// for chrome
        }  
     .box-visible{  
        opacity:1;
      }  

然后在 Jquery

     $(document).ready(function(){  
       $(function(){  
           $('.box').addClass('box-visible');  
       });
     });  

请记住:设置 div 的高度或在其中放置一些文本以注意更改。

于 2012-05-14T12:09:58.123 回答