javascript - AnimationStart 事件在 IE11 中未触发

标签 javascript css css-animations

我试图检测何时将具有特定 CSS 类的新元素添加到 DOM。我最初偶然发现了 OnDOMNodeInserted(事实证明在生产中使用它太慢)和 Mutation Observers,它们并不适用于所有浏览器。我能够使用 CSS 动画找到一个可行的解决方案,从这篇博客文章开始:

http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/

我已经实现了这个,它可以在除 IE 之外的每个浏览器中工作(自从我十多年前开始 Web 开发以来,似乎我一直在说“它可以在除了 IE 之外的每个浏览器中工作”,但那是另一个故事了) 。这个 fiddle - 在所有其他浏览器中都能完美地工作 - 将我想要做的事情提炼成一个简单的形式:

https://jsfiddle.net/Lued2cLk/15/

基本上,这个想法是,默认情况下,任何具有“requiresFeature”CSS 类的内容都将被隐藏,并且仅在启用该功能时才显示。如果启用该功能并添加该元素,它应该会显示。该 fiddle 中的“添加动态元素”链接将具有此 CSS 类的新元素添加到 DOM。

“requiresFeature”类实现了一个名为“nodeInserted”的短动画(实际上并不为任何内容设置动画),并且我们有文档级事件监听器等待动画开始:

 var event = function(e) {
    //alert('anim fired');
    if (e.animationName == 'nodeInserted') {
      T.WGE(T.WGE());
    }
  }

  document.addEventListener('animationstart', event, false);
  document.addEventListener('MSAnimationStart', event, false);
  document.addEventListener('webkitAnimationStart', event, false);

在 IE11 中任何情况下都不会触发animationstart 事件。最初我认为这可能是“visibility:hidden”属性的问题(我发现CSS类中的“display:none”会阻止动画在所有浏览器中触发),但删除它没有效果,animationstart事件不会触发。

我上面链接的博客文章中的示例在 IE11 中运行良好,但无论我如何查看它,我都无法让我的 fiddle 在 IE11 中运行。大家有什么想法吗?

只是为了解释一下有关 fiddle 的信息,T.WGE 方法根据传入的 bool 值打开或关闭该功能(启用工作组)。如果我在 IE11 中显式打开该功能(即使它已经打开) ,所有动态跨度都出现。但无论处于什么状态,动画都不会启动。

查看问题的最简单方法是单击“打开功能”,然后单击“添加动态元素”。应该发生的是一个新的跨度,其中“这只会出现在启用的工作组中”应该出现并设置为可见,但实际发生的情况是添加了跨度,但使其可见的触发器永远不会运行。

最佳答案

不知何故,在 StackOverflow 上发布我的问题似乎总是能引导我找到解决方案。

看来 IE 能够检测到我的动画没有执行任何操作并正在对其进行优化。通过添加任何会触发实际动画的内容(即使更改的样式实际上不会改变显示中的任何内容),我能够触发事件。

我将原来的 fiddle 中的 CSS 更改为这个并且它起作用了:

@keyframes nodeInserted {  
    from {  
        outline-color: #fff; 
    }
    to {  
        outline-color: #000;
    } 
}

@-moz-keyframes nodeInserted {  
    from {  
        outline-color: #fff; 
    }
    to {  
        outline-color: #000;
    } 
}

@-webkit-keyframes nodeInserted {  
    from {  
        outline-color: #fff; 
    }
    to {  
        outline-color: #000;
    } 
}

@-ms-keyframes nodeInserted {  
  from {  
        outline-color: #fff; 
    }
    to {  
        outline-color: #000;
    } 
}

@-o-keyframes nodeInserted {  
   from {  
        outline-color: #fff; 
    }
    to {  
        outline-color: #000;
    } 
} 

关于javascript - AnimationStart 事件在 IE11 中未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39758541/

相关文章:

javascript - 类型错误 : undefined is not an object (evaluating 'BMDPedometer.isStepCountingAvailable' )

javascript - 使用nunjucks时 block 结束报错

html - 使 flexbox 行成为最短子元素的高度?

html - 带图像的 CSS 固定侧菜单,换行

css - twitter-bootstrap 输入字段的最大宽度

animation - CSS 动画在严格的时间基础上工作吗?

javascript - toFixed() 文本字段中的简单使用/说明

javascript - 如何获得 Javascript 正则表达式匹配的字符串的实际值?

animation - 带有变换的 CSS3 动画导致 Webkit 上的元素模糊

用于坠落、振动等的 CSS 动画