2013-08-17 148 views
-1
$('a').on('click', function() { 
    var link = $(this); 

    if (!link.hasClass('animated')) { 
    link.addClass('animated'); 

    // css3 animation 

    // callback 
    setTimeout(function() { 
     link.removeClass('animated'); 
    }, 600); 
    } 
    } 
}); 

我使用此代碼來防止動畫閃爍。它會在製作動畫之前檢查動畫類的存在。由於性能不佳,我不使用animate功能。jQuery對象屬性而不是類

所以我明白,每次我要求做某些事情時,我都會影響DOM。

我想知道我是否可以在link對象上使用其他屬性而不是使用類?像:

link.animated = true; 

if (link.animated) { 
    // code 
} 

link.active = true; 

以下列方式使用它們是否安全?我可以面對的任何問題(緩存或whatelse)?

回答

1

使用data()方法相關的數據存儲與一個元素:

var $link = $(this); 

//set 
$link.data({ foo: 1 }); 

//get 
var foo = $link.data('foo'); 
+0

'數據'函數影響DOM – Jasper

+0

@Steve否,它保存在jQery的'$ .cache'。該元素只是數據的參考(鍵)。 – Johan

1

嘗試使用.data()代替類

$('a').on('click', function() { 
    var link = $(this); 

    if (!link.data('animation')) { 
     link.data('animation', true); 

     // css3 animation 

     // callback 
     setTimeout(function() { 
      link.data('animation', false); 
     }, 600); 
    } 

}); 
+0

我認爲'data'功能也影響DOM – Jasper

+1

@Steve沒有jQuery使用內部數據結構來存儲數據,它不會將它存儲在dom –

+0

中,但是如果我爲$ .data選中此項(而不是$(this)),它會給出正確的結果。對於在函數外部進行檢查的結果也是一樣的,或者我將調用$ .data的任何地方。所以看起來jQuery總是在'.data()'中添加數據屬性。 – Jasper

相關問題