forked from cybrespace/pinafore
* Cache main-nav in scrollIntoView.js. This change avoids continuously calling document.getElementById for the same element. * Fix firstVisibleElementIndex to always return a dictionary. Before this change, firstVisibleElementIndex would return -1 if it doesn't find anything. This made no sense since this function returns a dictionary on success. With this change, the function always returns a dictionary with the expected keys. * lint fix
This commit is contained in:
parent
d976b621b8
commit
2656e11bb0
|
@ -3,8 +3,12 @@ import {
|
||||||
getOffsetHeight } from './scrollContainer'
|
getOffsetHeight } from './scrollContainer'
|
||||||
import { smoothScroll } from './smoothScroll'
|
import { smoothScroll } from './smoothScroll'
|
||||||
|
|
||||||
|
let mainNavElement
|
||||||
function getTopOverlay () {
|
function getTopOverlay () {
|
||||||
return document.getElementById('main-nav').clientHeight
|
if (!mainNavElement) {
|
||||||
|
mainNavElement = document.getElementById('main-nav')
|
||||||
|
}
|
||||||
|
return mainNavElement.clientHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isVisible (element) {
|
export function isVisible (element) {
|
||||||
|
@ -20,6 +24,8 @@ export function isVisible (element) {
|
||||||
export function firstVisibleElementIndex (items, itemElementFunction) {
|
export function firstVisibleElementIndex (items, itemElementFunction) {
|
||||||
let offsetHeight = getOffsetHeight()
|
let offsetHeight = getOffsetHeight()
|
||||||
let topOverlay = getTopOverlay()
|
let topOverlay = getTopOverlay()
|
||||||
|
let first = -1
|
||||||
|
let firstComplete = -1
|
||||||
let len = items.length
|
let len = items.length
|
||||||
let i = -1
|
let i = -1
|
||||||
while (++i < len) {
|
while (++i < len) {
|
||||||
|
@ -29,14 +35,13 @@ export function firstVisibleElementIndex (items, itemElementFunction) {
|
||||||
}
|
}
|
||||||
let rect = element.getBoundingClientRect()
|
let rect = element.getBoundingClientRect()
|
||||||
if (rect.top < offsetHeight && rect.bottom >= topOverlay) {
|
if (rect.top < offsetHeight && rect.bottom >= topOverlay) {
|
||||||
let firstComplete = i
|
first = i
|
||||||
if (rect.top < topOverlay && i < (len - 1)) {
|
firstComplete = (
|
||||||
firstComplete = i + 1
|
rect.top < topOverlay && i < (len - 1)) ? i + 1 : i
|
||||||
}
|
break
|
||||||
return { first: i, firstComplete }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1
|
return { first, firstComplete }
|
||||||
}
|
}
|
||||||
|
|
||||||
export function scrollIntoViewIfNeeded (element) {
|
export function scrollIntoViewIfNeeded (element) {
|
||||||
|
|
Loading…
Reference in New Issue