名为`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中进行了说明:
词汇环境范围
如果H是一个元素的事件处理程序 ,那么让Scope是NewObjectEnvironment( 文档 , 全局环境 )的结果。
否则, H是
Window
对象的事件处理程序 :让Scope成为全局环境 。如果表单所有者不为null,则让Scope为NewObjectEnvironment( 表单所有者 , 范围 )的结果。
如果元素不为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
这是原始animate
function的使用示例:
elem.animate([ {transform: 'translateX(0px)'}, {transform: 'translateX(100px)'} ], 3000);
我刚刚有同样的问题。 现在我知道“animation”是一个保留字或什么的。 我把我的函数的名字从'animate'改成了'anim',程序运行正常。 什么恶作剧!