2013-08-17 94 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

相关问题