首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >css动画,动画名称,smoothstate.js

css动画,动画名称,smoothstate.js
EN

Stack Overflow用户
提问于 2014-09-20 23:36:11
回答 1查看 3.5K关注 0票数 5

尝试用smoothstate.js动画一些页面转换,我陷入了僵局。

这是一个小提琴手,但它正在抛出一个控制台错误,我在开发时没有得到这个错误。但是,您仍然可以看到我正在讨论的css问题:http://jsfiddle.net/3f5wp9xL/6/

下面是另一个演示,它没有控制台错误:http://davidwesleymartin.com/animtest/index.html

所有动画都用CSS设置(通过@keyframe,动画属性)。

动画在页面加载时工作,但当我试图在点击链接后将它们反转时,行为却很奇怪。当单击链接后,退出类(' is -exiting')被添加到主容器中时,我试图通过重置‘动画方向’属性来逆转它们。

我唯一能让它工作的方法是也为“动画名称”设置一个新的值,如果这个值和以前一样,它就不工作了。

相关HTML:

代码语言:javascript
复制
<div id='main'>
  <aside class='main-side'>
    <div class='anim_element anim_element--fadeIn'>
      <h2>sidebar</h2>
      <ul>
        <li>
          <a href='index.html'>Link 1</a>
        </li>
        <li>
          <a href='index.html'>Link 2</a>
        </li>
        <li>
          <a href='index.html'>Link 3</a>
        </li>
      </ul>
    </div>
  </aside>
  <div class='main-content'>
    <div class='anim_element anim_element--fadeInLeft'>
      <h1>Main Content</h1>
      <p>Lorem...</p>
    </div>
  </div>
</div>

相关的CSS (note:everything在演示中有适当的前缀,这不是问题):

代码语言:javascript
复制
@keyframes fadeIn{
    0% {
        opacity:0;
        transform:scale(0.8);
    }
    100% {opacity:1;}
}
@keyframes fadeInLeft{
    0% {
        opacity:0;
        transform: translate3d(-100%, 0, 0);
    }
    100% {
        opacity:1;
    }
}

#main .anim_element{
    animation-duration: .25s;
    transition-timing-function: ease-in;
    animation-fill-mode: both;
}

#main .anim_element--fadeIn{
    animation-name: fadeIn;
}
#main .anim_element--fadeInLeft{
    animation-name: fadeInLeft;
}

#main.is-exiting .anim_element{
    animation-name: fadeIn; 
    animation-direction: alternate-reverse;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 18:47:59

对我来说很管用。

http://davidwesleymartin.com/animtest/index.html

但小提琴演示已经坏了。我认为您需要指定要在href中加载的页面。

它起作用了。

代码语言:javascript
复制
<a href='index.html'>Link 3</a>

它不起作用。

代码语言:javascript
复制
<a href='/'>Link 3</a>

重点是链接的页面是否有#main元素。我觉得这有点像smoothState.js的错误。对于我来说,这一行发生了错误,这是在查找#id元素时发生的。

https://github.com/weblinc/jquery.smoothState.js/blob/master/jquery.smoothState.js#L215

更新

要重新启动css3动画,需要重新绘制元素。

更多信息:http://css-tricks.com/restart-css-animation/

代码语言:javascript
复制
;(function($) {
  'use strict';
  $.fn.restartCSSAnimation = function(cls) {
    var self = this;
    self.removeClass(cls);
    $.smoothStateUtility.redraw(self);
    setTimeout(function () { self.addClass(cls) });
    return self;
  };
  var $body = $('html, body'),
      content = $('#main').smoothState({
        // Runs when a link has been activated
        onStart: {
          duration: 1000, // Duration of our animation
          render: function (url, $container) {
            // toggleAnimationClass() is a public method
            content.toggleAnimationClass('is-exiting');
            // restart animation
            $('.anim_element--fadeIn').restartCSSAnimation('anim_element--fadeIn');
            $('.anim_element--fadeInLeft').restartCSSAnimation('anim_element--fadeInLeft');
            // Scroll user to the top
            $body.animate({scrollTop: 0});
          }
        }
      }).data('smoothState');
})(jQuery);

CSS

代码语言:javascript
复制
#main .anim_element--fadeIn {
  -webkit-animation-name: fadeIn;
          animation-name: fadeIn; }

#main .anim_element--fadeInLeft {
  -webkit-animation-name: fadeInLeft;
          animation-name: fadeInLeft; }

#main.is-exiting .anim_element {
  -webkit-animation-direction: alternate-reverse;
          animation-direction: alternate-reverse; }

http://jsfiddle.net/jewmmqoa/2/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25954294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档