【问题标题】:css animations, animation-name, smoothstate.jscss 动画,动画名称,smoothstate.js
【发布时间】:2014-11-15 06:01:47
【问题描述】:

尝试使用smoothstate.js 为一些页面过渡设置动画,但我陷入了僵局。

这是一个 jsfiddle,但它引发了我在开发时没有遇到的控制台错误。但是您仍然可以看到我正在谈论的 css 问题:http://jsfiddle.net/3f5wp9xL/6/

这是另一个没有控制台错误的演示:http://davidwesleymartin.com/animtest/index.html

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

动画在页面加载时起作用,但是当我在单击链接后尝试反转它们时表现得很奇怪。我试图通过在单击链接后将退出类('is-exiting')添加到主容器时重置'animation-direction'属性来反转它们。

我可以让它工作的唯一方法是为“动画名称”设置一个新值,如果它与以前的值相同,它就不起作用。

相关 HTML:

<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(注意:演示中的所有内容都正确添加了前缀,这不是问题):

@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;
}

【问题讨论】:

  • 您能否将演示代码放在 jsfiddle 中,嵌入问题本身或类似的东西中?它会让你早一点帮助你
  • 好吧我在jsfiddle上加了一个demo
  • 已修复。这就是我喝醉了的 jsfiddling 得到的。

标签: jquery css jquery-plugins css-transitions css-animations


【解决方案1】:

它对我有用。

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

但是 jsfiddle 演示坏了。我认为您需要在href 中指定要加载的页面。

有效。

<a href='index.html'>Link 3</a>

它不起作用。

<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/

;(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

#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/

【讨论】:

  • 抱歉,我的问题可能不太清楚。动画有两个阶段: 1. 页面加载时(侧边栏放大,主要内容从左侧进入) 2. 单击链接时(元素应该反转其入口动画)。 (2) 是什么不能正常工作。在以下演示之后:weblinc.github.io/jquery.smoothState.js/… 当 'is-exiting' 应用于主 div 时,它应该通过更改动画方向属性来实现。这不会发生,除非我声明一个与原始动画不同的新动画。
  • 因此主内容动画关闭,但侧边栏没有。 (即退出时应用的“动画名称”值对于主要内容部分是新的,但对于侧边栏不是。
  • 它有效!非常感谢你,好先生。这让我发疯了。
猜你喜欢
  • 1970-01-01
  • 2021-10-25
  • 2015-01-21
  • 2018-04-05
  • 2017-02-21
  • 1970-01-01
  • 2019-04-19
  • 2016-03-22
  • 1970-01-01
相关资源
最近更新 更多