2012-11-02 68 views
2

我想爲jQuery創建兩個新的方法,使得出現和消失的對象。 我不想使用jQuery方法show()hide()(既不fadeIn()或​​),因爲:出現和消失在jQuery

  • 效果不是漸進
  • div​​,則該對象不再在頁面呈現和所有其他div移動。

我的代碼無法正常工作:對象消失,但不會出現。

任何線索?

jQuery.fn.disappear = function() { 
    this.fadeTo('slow', 0, function() { 
    this.css('visibility', 'hidden'); 
}); 
}; 

jQuery.fn.appear = function() { 
    this.css('visibility', 'visible'); 
    this.fadeTo('slow', 1); 
}; 
+2

'fadeTo'是0和100之間,在第二函數你有1 – jackJoe

+1

,你必須顯示()和隱藏()在jQuery中的方法... –

+1

@jackJoe不根據[文檔](http://api.jquery.com/fadeto/):「不透明度 - 0到1之間的數字表示目標不透明度。」 –

回答

1

當 '本'用在一個自定義的jQuery函數中,它的值是一個jQuery對象。當在回調函數中使用'this'時,它是一個DOM對象。

正確的代碼:

jQuery.fn.disappear = function() { 
    this.fadeTo('slow', 0, function() { 
    jQuery(this).css('visibility', 'hidden'); 
}); 
}; 

jQuery.fn.appear = function() { 
    this.css('visibility', 'visible'); 
    this.fadeTo('slow', 1); 
}; 
+0

謝謝!!!!!你能解釋爲什麼它是這樣嗎? – Colas

+1

這就是jQuery創建的方式。 「這個」總是意味着「這個」對象。當你有一個jQuery原型的方法時,'this'指的是jQuery對象本身。當你有一個回調函數時,就會傳入對DOM對象的引用。檢出:http://docs.jquery.com/Plugins/Authoring –

1

嘗試:

jQuery.fn.disappear = function() { 
    $(this).fadeTo('slow', 0, function() { 
    }); 
}; 
jQuery.fn.appear = function() { 
    $(this).fadeTo('slow', 1, function(){ 
     console.log(this); 
    }); 
}; 

你都錯過了$()您this左右。 http://jsfiddle.net/jywkW/4/

能見度規則是不必要的,但你可以把它如果你喜歡。

+0

不透明度不是0-100,但0-1:http://api.jquery.com/fadeto/ –

+0

@JanDvorak你是對的。修復。 –

+0

不會消失:http://jsfiddle.net/jywkW/2/ –

1

爲什麼這麼難? 僅使用淡出和淡入 消失:

jQuery.fn.disappear = function(duration,callback) { 
this.animate({opacity:0},duration,callback); 
}; 

,並顯示:

jQuery.fn.appear = function(duration,callback) { 
this.animate({opacity:1},duration,callback); 
}; 

和訪問它,你可以做到這一點:

$(function(){ 
    $.appear(1000,function(){ 
    // Write a callback 
    // Like $(this).css('visibility','visible'); 
    }); 
    $.disappear(1000,function(){ 
    // Write a callback 
    // Like $(this).css('visibility','hidden'); 
    }); 
}); 
+0

在問題中看到我的編輯。 – Colas

+1

好的等待我將編輯我的答案呢! 等一下好! –