![](/img/trans.png)
[英]JS regex code doesn't work with firefox, but works on chrome and IE
[英]JS function named `animate` doesn't work in Chrome, but works in 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>
問題是,由於您使用事件處理程序內容屬性,您的全局函數...
window.animate
……被……遮住了
Element.prototype.animate
...最近在Web Animations 中引入:
由於 DOM Elements 可能是動畫的目標,因此Element接口 [ DOM4 ] 擴展如下:
Element implements Animatable;
這允許以下類型的用法。
elem.animate({ color: 'red' }, 2000);
此行為在獲取事件處理程序的當前值的第 10 步中進行了解釋:
詞法環境范圍
如果H是元素的事件處理程序,則讓Scope成為 NewObjectEnvironment( document ,全局環境) 的結果。
如果表單所有者不為空,則讓Scope為 NewObjectEnvironment( form owner , Scope ) 的結果。
如果element不為 null,則令Scope為 NewObjectEnvironment( element, Scope ) 的結果。
注意: NewObjectEnvironment() 在 ECMAScript 第 5 版第10.2.2.3節NewObjectEnvironment (O, E) 中定義
這意味着目標元素的范圍會影響全局范圍。
因此,您可以
重命名您的函數
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>
使用window.animate
(假設window
沒有被陰影化):
<p id='demo' onclick="window.animate()">Click me</p>
function animate() { var div = document.getElementById('demo'); div.style.left = "200px"; div.style.color = "red"; }
#demo { position: absolute; }
<p id='demo' onclick="window.animate()">Click me</p>
使用事件處理程序 IDL 屬性而不是內容屬性一:
document.getElementById('demo').onclick = animate;
function animate() { var div = document.getElementById('demo'); div.style.left = "200px"; div.style.color = "red"; } document.getElementById('demo').onclick = animate;
#demo { position: absolute; }
<p id='demo'>Click me</p>
document.getElementById('demo').addEventListener('click', animate);
function animate() { var div = document.getElementById('demo'); div.style.left = "200px"; div.style.color = "red"; } document.getElementById('demo').addEventListener('click', animate);
#demo { position: absolute; }
<p id='demo'>Click me</p>
如評論中所述,修復方法是重命名該函數,因為 Chrome 似乎保留了原始名稱。
element.animate()
即將推出的 Web Animations JavaScript API 可讓您通過腳本為 Web 內容制作動畫。 今天 Beta 版中包含的 element.animate() 函數是 Chrome 中發布的 API 的第一部分:它使使用 JavaScript 創建簡單的 CSS 動畫成為可能。 這意味着可以動態生成動畫而無需支付 CSS 樣式重新計算成本。 以這種方式創建的動畫也是可取消的,並提供有保證的結束事件(相比之下,CSS 過渡僅在導致樣式更改時才生成事件)。
http://blog.chromium.org/2014/05/chrome-36-beta-elementanimate-html.html
這是原始animate
函數的使用示例:
elem.animate([
{transform: 'translateX(0px)'},
{transform: 'translateX(100px)'}
], 3000);
我剛剛遇到了同樣的問題。 現在我知道 'animate' 是一個保留字之類的東西。 我將函數的名稱從“animate”更改為“anim”,程序運行良好。 什么惡作劇!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.