Ну, вот мое решение, если кому-то интересно.
В итоге я немного изменил исходный код jQuery, и, похоже, он работает хорошо. Затем я внес изменения в минимизированную версию с необходимыми настройками.
Вот что я сделал (для неминифицированных):
В функции animate:
jQuery, в операторе if()
, который проверяет «высоту» и «ширину», я добавил следующее:
// Detect inline-block standard, pre ie8 fix, and pre Firefox 3 fix
opt.ibCheck =(jQuery.css(this,'display') === 'inline-block') ||
(jQuery.css(this,'zoom') !== 'normal' && jQuery.css(this,'display') === 'inline') ||
(jQuery.css(this,'display') === '-moz-inline-stack');
Затем в jQuery.fx.prototype.update:
, в операторе if()
, который проверяет «height», «width» и «this.element.style», я изменил этот оператор if()
на следующий:
if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style && !this.options.ibCheck ) {
... проверка свойства ibCheck, которое было установлено в animate.
Кажется, все работает хорошо. Он проверяет наличие встроенного блока, общего исправления до Firefox 3 или исправления до ie8. Если он найден, он устанавливает для ibCheck значение true. Функция update()
не изменит отображение на «блокировка», если ibCheck имеет значение «истина».
Может быть лучше проверить IE. Я полагаю, что если кто-то анимирует элемент «inline» с установленным для zoom значением чего-либо, кроме «normal», это может вызвать проблемы? Что касается меня, я не знал, что IE даже принял атрибут 'zoom' до вчерашнего дня!