2015-12-17 41 views
4

jQuery documentation的()爲offset()狀態:偏移縮放元件

而且,當頁由用戶放大尺寸可能是不正確的;瀏覽器不公開API來檢測這種情況。

但是,有什麼方法可以在使用擴展來放大頁面內容時計算觸摸環境中瀏覽器的正確偏移?

我創建了一個小樣本來演示問題:https://jsfiddle.net/dhykgsmp/4/(在Chrome中打開)。請向下滾動並點擊放大。自動填充輸入的偏移量是錯誤的。

謝謝。

+0

定義「自動完成輸入的偏移量是錯誤的」,你期望它是什麼? – ggdx

+0

我期望當我將自動完成偏移值'top'和'left'設置爲另一個元素時,後者將在自動完成輸入之上移動。但事實並非如此。 –

+0

爲什麼你需要將下拉菜單放在絕對位置?你不能使它相對於輸入?然後所有這些定位魔法變得完全沒有必要只是如果有一個更簡單,更直接的方法,爲什麼使它變得複雜?看到這裏:https://jsfiddle.net/dhykgsmp/5/ –

回答

0

我不確定此代碼的預期功能是什麼,但是如果您希望'autocomplete input'元素相對於'autocomplete容器'被定位,我會建議使用.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; 
    } 
}