summaryrefslogtreecommitdiff
path: root/examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala')
-rw-r--r--examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala33
1 files changed, 12 insertions, 21 deletions
diff --git a/examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala b/examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala
index bd2f194..5c81ba2 100644
--- a/examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala
+++ b/examples/demos/src/main/scala/scrollmenu/ScrollSpy.scala
@@ -57,10 +57,12 @@ class ScrollSpy(structure: Tree[String],
rec(structure).tail
}
- js.Array(
- menuItems.map(name => dom.document.getElementById(Controller.munge(name)).asInstanceOf[html.Element])
- .map((el) => () => offset(el, main)):_*
- )
+ val offsets = for(name <- menuItems) yield {
+ val el = dom.document.getElementById(Controller.munge(name)).asInstanceOf[html.Element]
+ () => offset(el, dom.document.body)
+
+ }
+ js.Array(offsets:_*)
}
var open = false
@@ -87,21 +89,11 @@ class ScrollSpy(structure: Tree[String],
private[this] var scrolling = false
private[this] var scrollTop = -1
def apply(): Unit = {
- if (!scrolling) {
- scrolling = true
- scrollTop = main.scrollTop.toInt
- dom.setTimeout({() =>
- scrolling = false
- if (scrollTop == main.scrollTop) start()
- else apply()
- },
- 75
- )
- }
+ start()
}
private[this] var previousWin: MenuNode = null
private[this] def start(force: Boolean = false) = {
- val scrollTop = main.scrollTop
+ val scrollTop = dom.document.body.scrollTop
def walkIndex(tree: Tree[MenuNode]): List[Tree[MenuNode]] = {
val t @ Tree(m, children) = tree
val win = if(m.start == -1) true
@@ -118,6 +110,7 @@ class ScrollSpy(structure: Tree[String],
}
val winPath = walkIndex(domTrees)
+
val winItem = winPath.last.value
def walkTree(indices: List[Tree[MenuNode]]): Int = indices match {
case Nil => 0
@@ -130,8 +123,9 @@ class ScrollSpy(structure: Tree[String],
for {
child <- children
if !indices.headOption.exists(_.value.frag == child.value.frag)
- } walkHide(child)
-
+ } {
+ walkHide(child)
+ }
val size = walkTree(rest) + children.length
mn.frag.children(1).asInstanceOf[html.Element].style.maxHeight =
if (!open) size * 44 + "px" else "none"
@@ -153,10 +147,7 @@ class ScrollSpy(structure: Tree[String],
}
if (winItem != previousWin || force){
-// scroll(winItem.frag.children(0))
-// dom.history.replaceState(null, null, "#" + winItem.id)
previousWin = winItem
-// println(winPath.map(_.value.id))
walkTree(winPath)
}
}