inkle / inky

An editor for ink: inkle's narrative scripting language
http://www.inklestudios.com/ink
2.42k stars 296 forks source link

scrollDown malfunctions if it needs to scroll up instead #506

Open dstelzer opened 8 months ago

dstelzer commented 8 months ago

The scrollDown method in main.js is supposed to scroll to the new text after making a choice. This normally does require, well, scrolling down. But it can sometimes require scrolling up instead, if there are enough choices that the top of the first choice is above the browser viewport. When this happens it tries to scroll upward forever, preventing the user from accessing anything lower on the page.

To reproduce, have a long enough list of choices and a high enough browser zoom that the top of the choice list is above the viewport. Click any choice. The scroll bar will become stuck at the top of the page else, preventing the user from seeing anything else.

The broken line is:

var duration = 300 + 300*dist/100;

This results in a negative duration when dist is negative, which means the animation never ends. It should instead use Math.abs(dist).

dstelzer commented 8 months ago

Reported at inkjs also since this is specifically about the inkjs interpreter: https://github.com/y-lohse/inkjs/issues/1048

spaxton commented 3 months ago

Here to +1 both the broken line and the proposed fix.

The use case for me is for adding images to ink choices, which extends their height and is causing a frequent scroll lock. This is especially prevalent on mobile devices. It's easy to test by shrinking the window height on desktop to smaller than the total height of the choices.