Skip to content

Prevent swipe action when intended action is scroll #194

Description

@idrisadetunmbi

I have a container that is vertically scrollable and also includes a onSwipedUp action. When the container is vertically scrolled, the action gets called but that is not the intention at that point. I know it is possible to track the scrolling and prevent the swipe up action until the container is at scroll end, but is there a prop to achieve this internally?

const handlers  = useSwipeable({ onSwipedUp: () => { /* action gets called on scroll as well */ } })

<div {...handlers} style={{ overflowY: "scroll" }}></div> // container is scrollable but onSwipedUp gets called as well```

Activity

  1. hartzis commented on Aug 12, 2020

    @hartzis
    Collaborator

    @idrisadetunmbi There is such a prop, preventDefaultTouchmoveEvent, that calls e.preventDefault for touch move events that have an associated swipe handler.

    It is not the best named prop, but should accomplish what you're looking for.

    Please let me know if this works for your use case. Cheers.

  2. hartzis commented on Nov 6, 2020

    @hartzis
    Collaborator

    @idrisadetunmbi We additionally just released v6 which may help with this.

    We also added some documentation on possibly using touch-action to prevent scrolling

  3. diegohaz commented on Mar 7, 2022

    @diegohaz

    @hartzis I think the question was the opposite: preventing the swipe event when the user is scrolling.

    @idrisadetunmbi How did you solve the problem?

  4. hartzis commented on Mar 9, 2022

    @hartzis
    Collaborator

    @diegohaz I think you're absolutely right. I dont know where my head was 1½ years ago lol.
    @idrisadetunmbi apologies for miss-understanding your question.

    🤔 though this is still still quite tricky, how do you decipher a swipe intent vs a scroll intent?

    Maybe the new swipeDuration i'm working on in v7 could help?

  5. reopened this on Mar 9, 2022
  6. arifemir commented on Apr 11, 2022

    @arifemir

    is there any solution right now ?

  7. arifemir commented on Apr 12, 2022

    @arifemir

    is there any solution right now ?

    i have a solution its little bit awkward:

    1. create ref from swipeable element.
      <SwipeableComp {...handlers} ref={myRef}/>
    2. when onTouchMove "scroll component", unload the handler's ref
      <ScrollingComp onTouchMove={() => handlers.ref()} />
    3. fill SwipeableComp with myRef while onTouchMove
      <SwipeableComp {...handlers} ref={myRef} onTouchMove={() => handlers.ref(myRef)}
  8. hartzis commented on Apr 27, 2022

    @hartzis
    Collaborator
  9. moshfeu commented on Jul 25, 2022

    @moshfeu

    For me it didn't help because there is a visual implication on onSwiping.

    ezgif.com-gif-maker.mp4

    I wish to have a way to prevent swipe up and down which conflicts with vertical scrolling.

    I found a way to do it in a hacky way: settings big numbers for delta's up and down. e.g.

    delta: {
      up: 1000,
      down: 1000,
    },
  10. guillermodlpa commented on Jun 6, 2023

    @guillermodlpa

    Using swipeDuration: 250 combined with onSwipedDown worked perfectly for me, to enable a user to scroll up and down a dialog but also be able to close it by swiping it down. Thanks @hartzis !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions