Re: Touch scrolling after preventDefault called on first touchmove event

I think adding a note indicating that behavior after the first uncancelled
touchmove event is implementation dependent is worthwhile. Does this look
reasonable?

"A user agent should suppress the default action caused by any touchmove
event until at least one touchmove event associated with the same active
touch point is not cancelled. Whether the default action is suppressed for
touchmove events after at least one touchmove event associated with the
same active touch point is not cancelled is implementation dependent ."

On Wed, Jul 23, 2014 at 5:47 PM, <cathy.chan@nokia.com> wrote:
>
> > From: tdresser@google.com [mailto:tdresser@google.com] On Behalf Of ext
Timothy Dresser
> >
> >> On Tue, Jul 22, 2014 at 2:24 PM, <cathy.chan@nokia.com> wrote:
> >>> From: tdresser@google.com [mailto:tdresser@google.com] On Behalf Of
ext Timothy Dresser
> >>>> On Fri, Jul 18, 2014 at 5:01 PM, <cathy.chan@nokia.com> wrote:
> >>>>> From: ext Rick Byers [mailto:rbyers@google.com]
> >>>>> On Fri, Jul 18, 2014 at 11:27 AM, Timothy Dresser <
tdresser@chromium.org> wrote:
> >>>>>> If we used: "If *any* touchmove event is cancelled", then I think
Firefox would be in violation of the spec, as they only depend on whether
or not the first touchmove event is cancelled.
> >>>>>>
> >>>>>> Would this be preferable?
> >>>>>>
> >>>>>> "A touchmove event should cause no default action until a touchmove
> >>>>>> event associated with the same active touch point is not
cancelled."
> >>>>>>
> >>>>> I'd replace "until a touchmove event" with "unitl at least one
touchmove event" just to be explicit.
> >>>>>
> >>>> Isn't that just the standard behavior? An event is either explicitly
cancelled or not cancelled. Let's say the first touchmove event is
cancelled, and the fifth touchmove event is the first one that is "not
cancelled". That would mean that touchmove events #2, 3 and 4 were all
cancelled. Even without the requirement above, there would be no default
actions on the first 4 events, because they were explicitly cancelled. Am I
missing something?
> >>>
> >>> The key difference is that behavior once a touchmove event has been
left uncancelled is undefined.
> >>>
> >>>>> Basically what we're trying to say here is that browsers are
required to suppress scrolling for a touch sequence as long as all the
moves are being cancelled.
> >>>>> As soon as a move occurs that isn't cancelled then the browser MAY
or MAY NOT scroll (since implementations have always differed here).
> >>>> I think what you mean is that after a touchmove event is cancelled,
the UA may choose to (or choose not to) continue to implicitly cancel
subsequent touchmove events that are not cancelled. This continues until
the next touchmove event(s) is cancelled, at which point the UA must
s6uppress the default action for that event/those events, and may make
another decision about the non-cancelled events that follow, and so on.
> >>>
> >>> Not quite, once any touchmove event has been left uncancelled,
> >>> even if another touchmove is cancelled, the user agent can decide
whether or not to prevent its default action.
> >> I'm sorry if I'm a little dense. Are you saying that the user agent
can decide to not prevent the default action even if a touchmove event is
cancelled? That doesn't feel quite right.
> >
> > That's correct. The spec previously allowed for this, and most browsers
behave this way in some cases.
> >
> >>> What you've described here would mean that browsers which only pay
attention to whether or not the first touchmove event was cancelled would
become in violation of the spec.
> >>>>
> >>>> Would this capture the behavior?
> >>>> [[
> >>>> If the preventDefault method is called on any touchmove event of an
active touch point, it should prevent any default action caused by
subsequent touchmove events associated with the same active touch point on
which the preventDefault method is not called, such as scrolling.
> >>>> ]]
> >>> If I understand this correctly, its much too strict. Chrome, Safari,
and Firefox all allow default actions for a touch point which previously
received a cancelled touchmove event.
> >>
> >> How about a couple of examples to help understand what kind of
behavior(s) we want to allow?
> >>
> >> Example 1:
> >> First N touchmove events are cancelled. (A)
> >> Next N touchmove events are not cancelled. (B)
> >> Then another N touchmove events are cancelled. (C)
> >> Finally another N touchmove events are not cancelled. (D)
> > See example here: http://jsbin.com/dexax/28?quiet=1 (N = 10)
> > *     Chrome (Canary):
> >   o   No scrolling in A.
> >   o   Scrolling in B.
> >   o   You can't cancel events during scroll, indicated by the
event.cancelable flag being set to false, so there is scrolling during C.
> >   o   Scrolling in D.
> > *     Safari: No scrolling occurs (when document scrolling).
> >   o   div scrolling and div scrolling with "-webkit-overflow-scrolling:
touch;" behave differently.
> > *     Firefox: No scrolling occurs.
> >
> >> Example 2:
> >> First N touchmove events are not cancelled.
> >> Next N touchmove events are cancelled.
> >> Then another N touchmove events are not cancelled.
> >> Finally another N touchmove events are cancelled.
> > See example here: http://jsbin.com/wacuc/3?quiet=1 (N=10)
> > *     Chrome: No cancelable touchmove events are received, so scrolling
always occurs.
> > *     Safari: Always scrolls (when document scrolling). Events are
marked cancelable.
> > *     Firefox: Always scrolls. Events are marked cancelable.
> >> What would be the respective behavior in Chrome, Safari and Firefox?
> >
> > See
https://docs.google.com/a/chromium.org/document/d/12k_LL_Ot9GjF8zGWP9eI_3IMbSizD72susba0frg44Y/edit#heading=h.nxfgrfmqhzn7
for some details on behaviors in different browsers.
>
> Many thanks Tim. I think (hope?) I do get it now. I'd suggest a little
modification on your latest proposal (along with Rick's tweak).
> "A sequence of touchmove events should cause no default action until at
least one touchmove event associated with the same active touch point is
not cancelled."
>
> Alternatively,
> "A user agent should suppress the default action caused by any touchmove
event until at least one touchmove event associated with the same active
touch point is not cancelled."
>
> I also wonder if it's worth it to add a note that after the first
uncancelled touchmove event, the behavior is implementation dependent.
>
> - Cathy.

Received on Thursday, 24 July 2014 14:55:26 UTC