我正在尝试将mouseenter,live和setTimeout函数组合起来制作一些动画
$(".kundenList li").live("mouseenter", function(){
if ($(this).children().length > 0) {
$(this).data('timeout', setTimeout( function () {
$(this).children("div.description").css({opacity: '0'});
$(this).children("div.blacklayer").animate({
opacity: '0.85'
}, 300);
$(this).children("div.description").animate({
top: "-=200px",
opacity: '1'
}, 300).css( 'cursor', 'pointer' );
$(this).addClass("activeLI");
}, 300));
}
});
Html看起来像这样
<ul class="kundenList">
<li>
<img src="t3.png" class="kundenImg" />
<div class="blacklayer" style="opacity: 0;"></div>
<div class="description">
<h3>Title</h3>
<p>Description</p>
</div>
</li>
</ul>
由于我发布问题,显然不起作用:)。谁知道为什么?感谢。
PS我需要实时功能,因为我正在通过ajax加载新内容
答案 0 :(得分:3)
this
内的 setTimeout
指的是全局window
对象。将this
的引用存储在临时变量中,如下所示。 小提琴:http://jsfiddle.net/de7Fg/
$(".kundenList li").live("mouseenter", function(){
var $this = $(this); //Reference to `$(this)`
if ($this.children().length > 0) {
$this.data('timeout', setTimeout( function () {
// $this points to $(this), as defined previously
$this.children("div.description").css({opacity: '0'});
$this.children("div.blacklayer").animate({
opacity: '0.85'
}, 300);
$this.children("div.description").animate({
top: "-=200px",
opacity: '1'
}, 300).css( 'cursor', 'pointer' );
$this.addClass("activeLI");
}, 300));
}
});
答案 1 :(得分:2)
您无法使用li
内部超时功能访问this
。在超时函数之前定义一个变量,向$(this)
求助并在函数中使用它(example):
$(".kundenList li").live("mouseenter", function(){
var $this = $(this);
if ($this.children().size() > 0) {
$this.data('timeout', setTimeout( function () {
$this.children("div.description").css({opacity: '0'});
$this.children("div.blacklayer").animate({
opacity: '0.85'
}, 300);
$this.children("div.description").animate({
top: "-=200px",
opacity: '1'
}, 300).css( 'cursor', 'pointer' );
$this.addClass("activeLI");
}, 300));
}
});