【问题标题】:Overwrite jQuery to execute code after element has become visible - how to?在元素变得可见后覆盖 jQuery 以执行代码 - 如何?
【发布时间】:2011-08-17 22:40:13
【问题描述】:

我正在开发一个小型 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 中是否有一些主要的“显示元素”方法可以覆盖,以便所有与“显示元素”有关的方法都会受到我的代码的影响?还是我必须覆盖所有“显示方法”?谁能举例说明我如何参与这项任务?如果这是这样做的方法,我需要覆盖什么。

提前致谢。

【问题讨论】:

  • 你看过show的源码了吗?
  • 是的。我已经下载了 jQuery 的开发者版本。但老实说,这里发生的一些事情超出了我的范围。所以我想我希望有人对 jQuery 核心代码有更深入的了解,这可以给我一些关于如何解决这个问题的指导。
  • 你解决过这个问题吗?

标签: javascript jquery overwrite


【解决方案1】:

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

函数 checkElementVis(){

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 2021-09-21
    • 2015-12-04
    • 2019-02-11
    • 1970-01-01
    • 2021-04-02
    • 2019-10-21
    • 2021-11-30
    相关资源
    最近更新 更多