2015-12-17 3 views
4

jQuery documentation для offset() состояний:смещение() из увеличенного элемента

Кроме того, размеры могут быть неправильными, когда страница будет увеличена пользователем; браузеры не выставляют API для обнаружения этого условия.

Однако, есть ли способ, чтобы я мог рассчитать правильное смещение в браузерах в условиях касания при использовании спрэда для увеличения содержимого страницы?

Я создал небольшой образец, демонстрирующий проблему: https://jsfiddle.net/dhykgsmp/4/ (открыт в Chrome). Прокрутите вниз и нажмите кнопку увеличения. Смещение ввода автозаполнения неверно.

спасибо.

+0

Определить, что «смещение ввода автозаполнения неверно», что вы ожидаете от него? – ggdx

+0

Я ожидаю, когда я установил значения смещения автозаполнения 'top' и' left' в другой элемент, причем последний перемещается поверх ввода автозаполнения. Но это не так. –

+0

Зачем вам нужно выпадающее меню, чтобы быть абсолютно позиционированным? Не можете ли вы сделать это относительно ввода? Тогда вся эта магия позиционирования становится совершенно ненужной. Просто, если есть более простой и более простой способ, почему это осложняется? См. Здесь: https://jsfiddle.net/dhykgsmp/5/ –

ответ

0

Я не знаю, какова предполагаемая функциональность этого кода, но если вы хотите, чтобы элемент ввода «автозаполнения» был помещен относительно «контейнера автозаполнения», я бы предложил использовать атрибут .style.top , или получить местоположение с Element.getBoundingClientRect() и соответствующим образом установить позицию в вашей функции positionDropdown().

1

У меня была та же проблема и нашло обходное решение. Для выполнения этой работы необходим элемент корневого дочернего элемента с нулевыми смещениями.

$.fn.oldOffset = $.fn.offset; 
$.fn.offset = function() { 

    var c = $.fn.oldOffset.apply(this, arguments); 

    // root child element with zero offset 
    var wrc = $('body').children().first().oldOffset(); 

    var needToFix = wrc.left > 0 || wrc.top > 0; 
    if (needToFix) { 
     return { 
      left: c.left - wrc.left, 
      top: c.top - wrc.top 
     }; 
    } else { 
     return c; 
    } 
} 
Смежные вопросы