- From: Patrick H. Lauke <redux@splintered.co.uk>
- Date: Fri, 16 Jan 2015 21:04:09 +0000
- To: Matt Gaunt <mattgaunt@google.com>
- CC: "public-touchevents@w3.org" <public-touchevents@w3.org>, input-dev <input-dev@chromium.org>
On 16/01/2015 18:08, Matt Gaunt wrote: > The end goal of my comment is: what does a sane API look like - touch > events result from touch, mouse events result from mouse, nothing more, > nothing less. > > I agree doing compat events is great for older sites and we shouldn't > try and guess if the site is "old" or not - it's too late in the game > for that to be using anything like the viewport meta tag. DOCTYPE switching, perhaps? I jest, of course... > So how about we just move to having an api to disable compat mouse > events? I would love this and by default, no behavior change. My preference would definitely be a new method, a la e.preventMouseCompatibilityEvents() (or something a bit more terse, but I'd rather be explicit enough to avoid confusion). Only question is: as "click" is currently handled as a compatibility event as well in the TE model, would the above also kill "click"? I guess it wouldn't be a deal-breaker if it did, mind, and would keep things straightforward enough (i.e. wouldn't change the definition of "compatibility event" - after we specify that definition in the TE Errata/v.2). In fact, if it did, that would also make the naive var clickEvent = ('ontouchstart' in window ? 'touchend' : 'click'); blah.addEventListener(clickEvent, function() { ... }, false); pattern redundant, and instead allow for BOTH touchend and click to be added as event listeners, since the click could be explicitly suppressed. foo.addEventListener('touchstart', function(e) { e.MouseCompatibilityEvents(); ... }, false); /* doubled-up event listeners */ foo.addEventListener('touchend', someFunction, false); foo.addEventListener('click', someFunction, false); This is conceptually very similar to some of the current advice (for iOS and old Android WebKit at least, where no other method to remove the 300ms delay is available - see http://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay) foo.addEventListener('touchstart', function(e) { e.preventDefault(); }, false); /* doubled-up event listeners */ foo.addEventListener('touchend', someFunction, false); foo.addEventListener('click', someFunction, false); but without the side effect that preventDefault() has of also killing scrolling, zooming, etc. Anyway, sorry, rambling away...but hopefully makes some kind of sense. P -- Patrick H. Lauke www.splintered.co.uk | https://github.com/patrickhlauke http://flickr.com/photos/redux/ | http://redux.deviantart.com twitter: @patrick_h_lauke | skype: patrick_h_lauke
Received on Friday, 16 January 2015 21:04:35 UTC