css - 同步 CSS 动画时间(从 到 )

标签 css animation addclass timing

http://jsfiddle.net/7nm7xpwa/

请参阅此处的代码 ^

基本上,我有一个类,我将其添加到一个 div 中,该 div 可以对背景位置进行动画处理,从而创建移动的条纹效果(如理发杆)。该类是在单击事件上添加的,因此,背景动画的开始和停止在单击后不久开始。当使用多个 div 时,它们通常会不同步。有没有办法确保单击的第二个 div 的动画与单击的第一个 div 上的相同动画同步?

感谢您的宝贵时间!

代码也在这里:

CSS

.selected {

  background: linear-gradient(
    45deg, 
    rgba(255,255,255, .95)  25%, 
    transparent       25%, 
    transparent       50%, 
    rgba(255,255,255, .95)  50%, 
    rgba(255,255,255, .95)  75%, 
    transparent       75%, 
    transparent
  );  

  background: -webkit-linear-gradient(
    45deg, 
    rgba(255,255,255, .95)  25%, 
    transparent       25%, 
    transparent       50%, 
    rgba(255,255,255, .95)  50%, 
    rgba(255,255,255, .95)  75%, 
    transparent       75%, 
    transparent
  );  

    background: -o-linear-gradient(
    45deg, 
    rgba(255,255,255, .95)  25%, 
    transparent       25%, 
    transparent       50%, 
    rgba(255,255,255, .95)  50%, 
    rgba(255,255,255, .95)  75%, 
    transparent       75%, 
    transparent
  );  


      background: -moz-linear-gradient(
    45deg, 
    rgba(255,255,255, .95)  25%, 
    transparent       25%, 
    transparent       50%, 
    rgba(255,255,255, .95)  50%, 
    rgba(255,255,255, .95)  75%, 
    transparent       75%, 
    transparent
  );  


  animation: barberpole 2s linear infinite;

  -webkit-animation: barberpole 2s linear infinite;

  -moz-animation: barberpole 2s linear infinite;

/* opacity: .9;  */



}

@keyframes barberpole {
  from { background-position: 0 0; }
  to   { background-position: 200px 100px; }
}


@-webkit-keyframes barberpole {
  from { background-position: 0 0; }
  to   { background-position: 200px 100px; }
}


@-moz-keyframes barberpole {
  from { background-position: 0 0; }
  to   { background-position: 200px 100px; }
}



.pixel {
 width: 100px;
    height: 100px;
    background-color: grey;
float:left;
}

JS

$('.pixel').click(function(){

    $(this).addClass('selected');
});

HTML

<div class='pixel'></div>
<div class='pixel'></div>
<div class='pixel'></div>
<div class='pixel'></div>
<div class='pixel'></div>
<div class='pixel'></div>

最佳答案

过去几个小时我一直在尝试这个,我发现这既具有挑战性又有趣,但我找不到完美的解决方案。

我发现无法仅遵循之前的动画,因此我需要重置所有选定的类并将它们添加回来。

我实现这个(某种程度上)工作的方法是使用delay函数将其设置为与动画相同的时间,不幸的是,立即删除并重新添加类并没有产生相同的效果.

这是我的想法:

$('.pixel').click(function () {
    $('.pixel').each(function () {
        if ($(this).hasClass('selected')) {
            $(this).removeClass('selected').delay(2000).queue(function(){
                $(this).addClass('selected').dequeue();
            }); 
        }
    });
    $(this).addClass('selected');
});

这是更新后的 fiddle :http://jsfiddle.net/7nm7xpwa/9/

编辑:我找到了!这是上述技巧的完整解决方案(重置动画)。它基本上完全删除元素然后重新添加它,这样重置动画:

$('.pixel').click(function () {
    $('.pixel').each(function () {
        if ($(this).hasClass('selected')) {
            var elm = this,
                newone = elm.cloneNode(true);
            elm.parentNode.replaceChild(newone, elm);
        }
    });
    $(this).addClass('selected');
});

来源:Restart CSS Animation | CSS-TRICKS

这是新的 fiddle :http://jsfiddle.net/7nm7xpwa/10/

编辑 #2:在上面关于 CSS-TRICKS 的文章的评论中,我发现了一种更简单的动画重置/元素替换方法,如下所示:

$('.pixel').click(function () {
    $('.pixel').each(function () {
        if ($(this).hasClass('selected')) {
            $(this).replaceWith($(this).clone(true)); // turned this into a 1 liner
        }
    });
    $(this).addClass('selected');
});

你的另一个版本:http://jsfiddle.net/7nm7xpwa/11/

关于css - 同步 CSS 动画时间(从 到 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315900/

相关文章:

jquery - 卡片不完整或在引导 Accordion 中被剪断

iphone - Cocos2D 获取 CCAction 的进展

javascript - 如果 href=url 更改/添加类到父元素

css - 使用 href 在点击列表上保持活跃

javascript - 在更新 div 的同时添加和删除类

CSS 和字体大小与文本长度成正比?

javascript - 如何调整 HTML 元素的高度以覆盖其父元素的所有可用空间?

javascript - SVG动画: Object along a path on a scroll

android - 动画展示适用于 14 岁以上 Android 设备

Android:覆盖共享元素返回动画