Skip to content
This repository has been archived by the owner on Aug 9, 2023. It is now read-only.

Disabling the asscroll on menu or modal open #34

Closed
victornnaji opened this issue Feb 18, 2021 · 10 comments
Closed

Disabling the asscroll on menu or modal open #34

victornnaji opened this issue Feb 18, 2021 · 10 comments
Assignees

Comments

@victornnaji
Copy link

Currently using Asscroll on my gatsby project and everything seems to be going fine until I discovered an anomaly with the behaviour of the page when the menu is open.

Before using the library, when the menu is set to open, the page is fixed and doesn't scroll until the menu is set to close again. With Asscroll, when the menu is opened, the page would still scroll since the fixed position no longer works inside of the asscroll container.

I shared the isOpen state via context across the page and used ternary where I instantiated the asscroll library as so

isOpen? asscroll.disable() : asscroll.enable()

The disable never seems to work unless I use it without the conditionals.

How else can I fix this?

@ashthornton ashthornton self-assigned this Feb 18, 2021
@ashthornton
Copy link
Owner

Hi @nnaji-victor, this one will be hard to debug without seeing the problem myself, is there a way you can create a reduced working demo on Codepen for example, or share more of your code?

The disable never seems to work unless I use it without the conditionals.

Does this mean disabling does what it is supposed to if you just call it outside the conditional?

Also, you should need to call asscroll.enable(true) when re-enabling as the first parameter controls the restoration of the scroll position you were at when you called .disable()

@victornnaji
Copy link
Author

I made this quick demo to demonstrate the issue I am currently facing https://ikunw.sse.codesandbox.io/

The sandbox is https://codesandbox.io/s/xenodochial-brahmagupta-ikunw

@ashthornton
Copy link
Owner

I can't see asscroll.disable() being called anywhere. You need to call this to prevent the page from scrolling.

@victornnaji
Copy link
Author

Yes. I mean, I only need the asscroll.disable() when the menu is open and then enabled when the menu is closed.

I have updated the layout.js to include this conditional - open ? asscroll.disable(): asscroll.enable();

the issue still persisted.

Take a look again at the sandbox.
https://codesandbox.io/s/xenodochial-brahmagupta-ikunw?file=/src/components/layout.js:994-1043

@ashthornton
Copy link
Owner

ashthornton commented Feb 18, 2021

I'm not that familiar with React, but won't that just check if open is true/false when first loading the page? It's not being called each time open changes.

I'm unable to make changes to the codesandbox without it forking my own version, which can't run because of errors.

Can you share an editable version?

@victornnaji
Copy link
Author

The conditional is inside a useEffect where open is passed as a dependency meaning that it will always run when there is a change in open.

I can invite you to edit it without having to run install. I will need your email to do that.

@ashthornton
Copy link
Owner

Are you able to invite using just my username? ashthornton

@ashthornton
Copy link
Owner

I see what the issue is - the useEffect callback is being run every time the button is pressed, so you're making new instances of ASScroll every time. You need to run all of that code just once, then run asscroll.enable/disable during the effect callback.

@victornnaji
Copy link
Author

Thank you for your assistance. Now I know what the problem is However, Instantiating ASScroll outside a useEffect will trigger an error so I will take some time to find the best way to fix it.

@ashthornton
Copy link
Owner

Someone had a similar issue I believe: #18

This might help: https://www.gatsbyjs.com/docs/debugging-html-builds/#how-to-check-if-window-is-defined

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants