Ver a proveniência

Identify manual scrolling to cancel scroll to top reset on mouse idle (#9245)

master
Les Orchard há 5 anos
committed by Eugen Rochko
ascendente
cometimento
2f86fc5e0a
1 ficheiros alterados com 17 adições e 6 eliminações
  1. +17
    -6
      app/javascript/mastodon/components/scrollable_list.js

+ 17
- 6
app/javascript/mastodon/components/scrollable_list.js Ver ficheiro

@@ -59,6 +59,13 @@ export default class ScrollableList extends PureComponent {
} else if (this.props.onScroll) {
this.props.onScroll();
}

if (!this.lastScrollWasSynthetic) {
// If the last scroll wasn't caused by setScrollTop(), assume it was
// intentional and cancel any pending scroll reset on mouse idle
this.scrollToTopOnMouseIdle = false;
}
this.lastScrollWasSynthetic = false;
}
}, 150, {
trailing: true,
@@ -66,8 +73,16 @@ export default class ScrollableList extends PureComponent {

mouseIdleTimer = null;
mouseMovedRecently = false;
lastScrollWasSynthetic = false;
scrollToTopOnMouseIdle = false;

setScrollTop = newScrollTop => {
if (this.node.scrollTop !== newScrollTop) {
this.lastScrollWasSynthetic = true;
this.node.scrollTop = newScrollTop;
}
};

clearMouseIdleTimer = () => {
if (this.mouseIdleTimer === null) {
return;
@@ -99,7 +114,7 @@ export default class ScrollableList extends PureComponent {

handleMouseIdle = () => {
if (this.scrollToTopOnMouseIdle) {
this.node.scrollTop = 0;
this.setScrollTop(0);
}

this.mouseMovedRecently = false;
@@ -132,11 +147,7 @@ export default class ScrollableList extends PureComponent {
// Reset the scroll position when a new child comes in in order not to
// jerk the scrollbar around if you're already scrolled down the page.
if (snapshot !== null) {
const newScrollTop = this.node.scrollHeight - snapshot;

if (this.node.scrollTop !== newScrollTop) {
this.node.scrollTop = newScrollTop;
}
this.setScrollTop(this.node.scrollHeight - snapshot);
}
}



Carregando…
Cancelar
Guardar