Opened 7 years ago

Closed 6 years ago

Last modified 6 years ago

#4631 closed bug (fixed)

Draggable: Fixed positions include wrong scroll offset in Safari 4

Reported by: attaboy Owned by:
Priority: critical Milestone: 1.8
Component: ui.draggable Version: 1.7.2
Keywords: draggable fixed position scroll offset safari Cc:
Blocked by: Blocking:


This re-opens bug #4142.

Safari 4 fixed the bug that this fix worked around, and as a result, fixed position scroll offsets are now wrong in Safari 4. (Ah, the joys of browsers.)

I have devised a simple patch which checks the Webkit version number before using the old workaround. Webkit 526 and higher is equivalent to Safari 4.

Basically, for tests like:

$.browser.safari && this.cssPosition == 'fixed'

The code would become:

$.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed'

Attachments (1)

draggable-4631.diff (4.5 KB) - added by alexch 6 years ago.
revised patch for draggable.js

Download all attachments as: .zip

Change History (9)

comment:1 Changed 7 years ago by jzaefferer

  • Milestone changed from TBD to 1.8

comment:2 Changed 7 years ago by scottgonzalez

We should remove the browser check and actually do feature detection.

comment:3 follow-up: Changed 7 years ago by jzaefferer

Whats the feature here, and how can we detect it?

comment:5 Changed 6 years ago by alexch

That URL has two "Fixed" elements inside scrolling divs but neither one is even visible on the screen in Safari 4! No wonder you can't reproduce it! :-)

Just make a position:fixed div on a page with a bunch of other items halfway down a page, shrink the window so the scrollbar appears on the main window, scroll down a bit, then start dragging the div. You'll see it jump around spastically.

comment:6 Changed 6 years ago by alexch

I patched my copy and did some DRYing out of the relevant code as well. It's much clearer now that 4 nearly-identical nested-ternary-operator statements are replaced with some function calls.

Changed 6 years ago by alexch

revised patch for draggable.js

comment:7 Changed 6 years ago by scottgonzalez

  • Resolution set to fixed
  • Status changed from new to closed

Fixed in r3778. Now with even more browser detection! :-(

comment:8 in reply to: ↑ 3 Changed 6 years ago by scottgonzalez

Replying to joern.zaefferer:

Whats the feature here, and how can we detect it?

The feature is whether or not we can determine the offset correctly for fixed position elements. You can create a fixed position element, position it, get the offset and determine if the value is correct.

Note: See TracTickets for help on using tickets.