jquery/jquery

offset() can be inaccurate when pinch-zoomed

Open

#3,822 opened on Oct 19, 2017

View on GitHub
 (6 comments) (0 reactions) (0 assignees)JavaScript (59,842 stars) (20,438 forks)batch import
Offsethelp wanted

Description

Bug Reports:

  • What do you expect to happen? offset() should return offset from document origin
  • What actually happens? On some browsers, it can be off when pinch-zoomed
  • Which browsers are affected? Edge, possibly Safari in the future.

Description

Open the console and click/tap on the input box. Now pinch-zoom into the page, scroll to the very top, then scroll back down to the input box and tap it. The output should always be the same.

See https://bugs.webkit.org/show_bug.cgi?id=170981 for some background and https://developers.google.com/web/updates/2017/09/visual-viewport-api for the details.

The issue is that offset() is adding getBoundingClientRect (which is relative to the layout viewport) to window.pageX|YOffset which is relative to the visual viewport.

Note: Chrome recently made pageYOffset relative to the layout viewport so this isn't an issue there.

Link to test case

http://jsbin.com/vucayumeta

Contributor guide