Перезаписать jQuery для выполнения кода после того, как элемент стал видимым - как? - PullRequest
1 голос
/ 03 мая 2011

Я разрабатываю небольшой фреймворк для внутреннего использования в нашей компании.В некоторых случаях наша среда перезаписывает базовые функциональные возможности 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);

Мой первоначальный подход состоял в том, чтобы просто сделать это таким образом (запустить мой код в «// Делать вещи после»).Это также прекрасно работает, за исключением случаев, когда вы передаете параметр скорости (потому что тогда он использует что-то вроде setTimeout или setInterval для внутреннего использования) или использует один из других методов «показать элемент».

Есть ли в jQuery какой-нибудь мастер-метод «показать элемент», который я могу перезаписать, чтобы мой метод использовал все методы, имеющие отношение к «показу элементов»?Или я должен перезаписать все "методы показа"?Кто-нибудь может привести пример того, как я могу выполнить эту задачу?и что мне нужно перезаписать, если это способ сделать это.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 мая 2011

Я думаю, что вы хотите что-то вроде селектора .is () и: visible. Похоже, вы захотите запустить такую ​​функцию, используя setInterval

function checkElementVis () {

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...