UX: Discard selected post if it is not in viewport. (#7869)

This way, users can combine keyboard shortcuts with mouse scrolling.
This commit is contained in:
Dan Ungureanu 2019-07-10 17:22:09 +03:00 committed by Robin Ward
parent 8b2580e20f
commit 90fcdad3cd
1 changed files with 14 additions and 1 deletions

View File

@ -439,9 +439,22 @@ export default {
$selected = $articles.filter("[data-islastviewedtopic=true]");
}
// Discard selection if it is not in viewport, so users can combine
// keyboard shortcuts with mouse scrolling.
if ($selected.length !== 0) {
const offset = minimumOffset();
const beginScreen = $(window).scrollTop() - offset;
const endScreen = beginScreen + window.innerHeight + offset;
const beginArticle = $selected.offset().top;
const endArticle = $selected.offset().top + $selected.height();
if (beginScreen > endArticle || beginArticle > endScreen) {
$selected = null;
}
}
// If still nothing is selected, select the first post that is
// visible and cancel move operation.
if ($selected.length === 0) {
if (!$selected || $selected.length === 0) {
const offset = minimumOffset();
$selected = $articles
.toArray()