diff --git a/src/lib/ui.desktop.js b/src/lib/ui.desktop.js index 6c30dcbd..b06a4daa 100644 --- a/src/lib/ui.desktop.js +++ b/src/lib/ui.desktop.js @@ -72,9 +72,26 @@ export function scrollToSelectedItem(parentEl, containerSelector, selectedItemSe const containerOuterHeight = getOuterHeight(container); const selectedItemOuterHeight = getOuterHeight(selectedItem); - const targetPos = selectedItem.offsetTop - container.offsetTop - parseInt(getCssValue(container, 'padding-top'), 10) + let targetPos = selectedItem.offsetTop - container.offsetTop - parseInt(getCssValue(container, 'padding-top'), 10) - (containerOuterHeight - selectedItemOuterHeight) / 2; + if (selectedItems.length > 1) { + + let firstSelectedItem = selectedItems[0]; + let lastSelectedItem = selectedItems[selectedItems.length - 1]; + + let firstSelectedItemInTop = firstSelectedItem.offsetTop - container.offsetTop - parseInt(getCssValue(container, 'padding-top'), 10); + let lastSelectedItemInTop = lastSelectedItem.offsetTop - container.offsetTop - parseInt(getCssValue(container, 'padding-top'), 10); + let lastSelectedItemInBottom = lastSelectedItem.offsetTop - container.offsetTop - parseInt(getCssValue(container, 'padding-top'), 10) + - (containerOuterHeight - selectedItemOuterHeight); + + targetPos = (firstSelectedItemInTop + lastSelectedItemInBottom) / 2; + + if (lastSelectedItemInTop - firstSelectedItemInTop > containerOuterHeight) { + targetPos = firstSelectedItemInTop; + } + } + if (targetPos <= 0) { return; }