2011-05-03 70 views
1

我正在開發一個小型的JavaScript框架供我們公司內部使用。在某些情況下,我們的框架覆蓋了基本的jQuery功能,以便處理內部邏輯或修復瀏覽器錯誤等。我希望這些情況對於我們的開發人員來說是完全透明的,以便他們可以繼續按照習慣使用jQuery。覆蓋jQuery以在元素變得可見之後執行代碼 - 如何?

我遇到了一個問題,我似乎無法讓我的頭以一種很好的透明方式做 - 至少我不能想出一個好方法來做到這一點 - 所以我轉向你:)。

我想要做的就是以某種方式覆蓋jQuery,以便每次「變得可見」時執行某段代碼。例如,如果開發人員運行show()方法,我希望在元素變得可見之後執行我的代碼。事實上,不管開發人員如何「使元素可見」(例如show(),css(),animate()等)我想我的代碼運行我知道show()例如有一個「回調「參數,可以用於這一點。但重點是;這對開發者應該是完全透明的。他不需要知道這段代碼「在底下運行」。

我所有的覆蓋都是使用閉包完成的,所以我可以保存對原始方法的引用,執行我的操作並執行原始代碼。下面是我如何與表演方法做這樣一個例子:

(function ($) { 
    var originalShowMethod = jQuery.fn.show; 
    jQuery.fn.show = function (speed, easing, callback) { 
    // Do stuff before 
    var theReturn = jQuery(originalShowMethod.call(this, speed, easing, callback)); 
    // Do stuff after 
    return theReturn; 
    }; 
})(jQuery); 

我最初的做法是隻是單純地做這種方式(在運行我的代碼「//做的東西后」)。除非你傳遞一個速度參數(因爲它在內部使用諸如setTimeout或setInterval之類的東西),或者使用其他「顯示元素」方法之一,這也很好。

jQuery中有一些主要的「顯示元素」方法,我可以覆蓋,所以與「顯示元素」有關的所有方法都會受到我的代碼段的影響嗎?還是我必須覆蓋所有「顯示方法」?任何人都可以舉個例子說明我可以如何幫助這項任務?以及如果要這樣做,我需要重寫。

在此先感謝。

+0

你已經看過'show'的源代碼了嗎? – 2011-05-03 21:18:27

+0

是的。我已經下載了jQuery的開發者版本。但是,在這裏發生的一些事情超出了我的誠實。所以我想我希望有人對jQuery核心代碼有更深入的瞭解,可以給我一些關於如何解決這個問題的指導。 – treksterDK 2011-05-04 05:30:58

+0

你有沒有解決過這個問題? – Matteo 2013-02-06 15:34:43

回答

0

我想你想的東西像。是()和:可見選擇,這聽起來像你可能想使用的setInterval

功能checkElementVis運行這樣的功能(){

if($(".element").is(":visible")){ 
    alert("is visible"); 
} else { 
alert("not visible"); 
} 

}

相關問題