名为`animate`的JS函数在Chrome中不起作用,但在IE中起作用

这将无法正常工作,没有任何反应。 我如何使它工作,我做错了什么?

function animate() { var div = document.getElementById('demo'); div.style.left = "200px"; div.style.color = "red"; } 
 #demo { position: absolute; } 
 <p id='demo' onclick="animate()">lolol</p> 

问题是,由于您使用事件处理程序内容属性 ,您的全局function…

 window.animate 

…被…遮蔽

 Element.prototype.animate 

最近在网页animation中介绍的:

5.21 Element接口的扩展

由于DOM元素可能是animation的目标, Element接口[ DOM4 ]的扩展如下:

 Element implements Animatable; 

这允许以下types的用法。

 elem.animate({ color: 'red' }, 2000); 

此行为在获取事件处理程序的当前值的 步骤10中进行了说明:

词汇环境范围

  1. 如果H是一个元素的事件处理程序 ,那么让Scope是NewObjectEnvironment( 文档全局环境 )的结果。

    否则, HWindow对象的事件处理程序 :让Scope成为全局环境

  2. 如果表单所有者不为null,则让Scope为NewObjectEnvironment( 表单所有者范围 )的结果。

  3. 如果元素不为null,则让Scope为NewObjectEnvironment( element,Scope )的结果。

注意: NewObjectEnvironment()在ECMAScript第5版第10.2.2.3节中定义NewObjectEnvironment(O,E)

这意味着目标元素的作用域会影响全局作用域。

所以,你可以

  • 重命名你的function

     function animate__() { var div = document.getElementById('demo'); div.style.left = "200px"; div.style.color = "red"; } 
     #demo { position: absolute; } 
     <p id='demo' onclick="animate__()">Click me</p> 

正如在评论中提到的,修复是重命名的function,因为它似乎Chrome保留了原来的名字。

element.animate()

即将推出的WebanimationJavaScript API可让您从脚本中为网页内容制作animation。 包含在今天testing版中的element.animate()函数是在Chrome中发布的API的第一部分:它可以使用JavaScript创build简单的CSSanimation。 这意味着可以dynamic生成animation,而无需支付CSS样式重新计算成本。 以这种方式创build的animation也是可取消的,并提供有保证的结束事件(相比之下,CSS转换只生成事件,如果他们导致风格改变)。

http://blog.chromium.org/2014/05/chrome-36-beta-elementanimate-html.html

这是原始animatefunction的使用示例:

 elem.animate([ {transform: 'translateX(0px)'}, {transform: 'translateX(100px)'} ], 3000); 

我刚刚有同样的问题。 现在我知道“animation”是一个保留字或什么的。 我把我的函数的名字从'animate'改成了'anim',程序运行正常。 什么恶作剧!