1

我正在开发一个小型 javascript 框架供我们公司内部使用。在某些情况下,我们的框架会覆盖基本的 jQuery 功能,以处理内部逻辑或修复浏览器错误等。我希望这些情况对我们的开发人员来说是完全透明的,这样他们就可以继续按照他们习惯的方式使用 jQuery。

我遇到了一个问题,我似乎无法以一种很好的透明方式解决问题——至少我想不出一个好的方法来解决它——所以我求助于你:)。

我想要做的是以某种方式覆盖 jQuery,这样我就可以在每次“变得可见”时执行一段特定的代码。例如,如果开发人员运行 show() 方法,我想在元素变得可见后执行我的代码。事实上,无论开发人员如何“使元素可见”(例如 show()、css()、animate() 等),我都希望我的代码能够运行

我知道例如 show() 有一个“回调”参数可以用于此目的。但重点是;这对开发人员来说应该是完全透明的。他不需要知道这段代码“在下面运行”。

我所有的覆盖都是使用闭包完成的,所以我可以保存对原始方法的引用,做我的事情并执行原始方法。这是我如何使用 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);

我最初的方法是简单地这样做(在“// Do stuff after”处运行我的代码)。除非您传递速度参数(因为它在内部使用 setTimeout 或 setInterval 之类的东西)或使用其他“显示元素”方法之一,否则这也很有效。

jQuery中是否有一些我可以覆盖的主要“显示元素”方法,所以所有与“显示元素”有关的方法都会受到我的代码的影响?还是我必须覆盖所有“显示方法”?谁能举例说明我如何参与这项任务?如果这是这样做的方法,我需要覆盖什么。

提前致谢。

4

1 回答 1

0

我认为您想要 .is() 和 :visible 选择器之类的东西,听起来您可能想使用 setInterval 运行这样的函数

函数 checkElementVis(){

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

}

于 2011-05-04T18:52:12.180 回答