On Jun 8, 2010, at 7:50 PM, Andy Estes wrote:
> Hi Nathan,
> 
> It is true that Safari now emits mousewheel events in increments of 120 for 
> compatibility reasons.  However, there is no loss of granularity in the sense 
> that events are generated on fractional wheel ticks and are accelerated on 
> platforms that support it.  The only difference is that you will see 
> increments of 120 rather than increments of 1.  It's been a few months since 
> I've checked (and I can't look at the URL you attached on my phone), but I 
> believe you'll see the same behavior in Chrome and IE.

I will not have access to IE for some time, but I think the old behaviour was 
more compatible. I am not the original author of the OpenLayers code (just made 
some un-integrated improvements, not shown below, to deal with WebKit's 
wheelDelta acting like wheelDeltaX at times) but I think it demonstrates the 
previous state of scroll wheel delta across browsers:

var delta;              // one scroll wheel "click" (corresponds to zoom level 
zoom level)
if (e.wheelDelta) {
        delta = e.wheelDelta/120; 
        if (window.opera && window.opera.version() < 9.2) {
                delta = -delta;
        }
} else if (e.detail) {
        delta = -e.detail / 3;
}

Webkit, IE and Opera seemed to be giving a wheelDelta in pixels or something 
where one "line" was about 40 units, while Gecko gave a detail where one line 
corresponds to 1 unit (assuming one old-school mouse wheel "click" scrolled ~3 
lines).

What Safari 4 seemed to do was simply provide much greater precision, where 
scrolling half a line simply yielded about 20 units instead of being ignored. 
So the above code would yield integral deltas in browsers that only fired 
events in 3-line increments, but nice fractional deltas in WebKit.


What Safari 5's WebKit does is turn one "line" into 4800 (!) units instead of 
40. For Safari 5 the code above needs to read as follows to work the same. You 
can see it isn't really "more compatible" at all:

var delta;              // one scroll wheel "click" (corresponds to zoom level 
zoom level)
if (isSafari5) {
        delta = e.wheelDelta / 120 / 120;
} else if (e.wheelDelta) {
        delta = e.wheelDelta/120; 
        if (window.opera && window.opera.version() < 9.2) {
                delta = -delta;
        }
} else if (e.detail) {
        delta = -e.detail / 3;
}


It sounds like this was a well-intentioned change, but missed the fact that 
that the values that are now being re-multiplied by 120 were *already* scaled 
to the "1 'click' = 120 units" range.

hope this helps,
-natevw



> I would also point out that in DOM Level 3 Events, mousewheel events are 
> considered deprecated and the unit of wheelDelta is left up to the 
> implementor.  IE set this increment to 120 some time ago, and we chose to 
> match this behavior to be compatible with sites that expect it.  As you can 
> imagine, the opposite problem occurs on those sites (extremely slow 
> scrolling).  Unfortunately any decision we made here was bound to break some 
> sites.
> 
> -Andy
> 
> Sent from my iPhone
> 
> On Jun 8, 2010, at 19:09, Nathan Vander Wilt <[email protected]> wrote:
> 
>> In Safari 4, the following event handler would log nice smooth values when 
>> scrolling:
>> // logs: -3, -9, -6, -48, ...
>> document.addEventListener("mousewheel", function(e) { 
>> console.log(e.wheelDeltaY); });
>> 
>> In Safari 5, the mousewheel events have lost all precision, and are now big 
>> ugly integral multiples of 120:
>> // logs: -120, -240, -120, -480, ... (no correspondence with above values, 
>> of course)
>> document.addEventListener("mousewheel", function(e) { 
>> console.log(e.wheelDeltaY); });
>> 
>> This is a serious loss of precision, and brings us back to the primitive 
>> days when a mouse a had 1-axis clicky scroll wheel if it had one at all, and 
>> Firefox was the top browser. Compare the smooth, precise scroll zooming of 
>> http://calftrail.com/Share/multitouch/ in Safari 4 to the jerky, 
>> way-too-fast zooming in Safari 5.
>> 
>> Is this a regression introduced directly in recent WebKit builds, or is it 
>> Safari-specific? If the former, was it really necessary and can it please be 
>> rolled back?
>> 
>> thanks,
>> -natevw
>> _______________________________________________
>> webkit-dev mailing list
>> [email protected]
>> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to