Преглед изворни кода

fix: Automatic jump back when click 'prev' in a long page

close #3394
Tienson Qin пре 4 година
родитељ
комит
86740dd1d4
1 измењених фајлова са 14 додато и 4 уклоњено
  1. 14 4
      src/main/frontend/ui.cljs

+ 14 - 4
src/main/frontend/ui.cljs

@@ -270,7 +270,7 @@
 
 (defn main-node
   []
-  (gdom/getElement "main-content"))
+  (gdom/getElement "main-container"))
 
 (defn get-scroll-top []
   (.-scrollTop (main-node)))
@@ -369,16 +369,26 @@
       (.removeEventListener js/window "blur" clear-all)
       (.removeEventListener js/window "visibilitychange" clear-all))))
 
+(defonce last-scroll-top (atom 0))
+
+(defn scroll-down?
+  []
+  (let [scroll-top (get-scroll-top)]
+    (let [down? (> scroll-top @last-scroll-top)]
+      (reset! last-scroll-top scroll-top)
+      down?)))
+
 (defn on-scroll
   [node on-load on-top-reached]
   (let [full-height (gobj/get node "scrollHeight")
         scroll-top (gobj/get node "scrollTop")
         client-height (gobj/get node "clientHeight")
         bottom-reached? (<= (- full-height scroll-top client-height) 100)
-        top-reached? (= scroll-top 0)]
-    (when (and bottom-reached? on-load)
+        top-reached? (= scroll-top 0)
+        down? (scroll-down?)]
+    (when (and down? bottom-reached? on-load)
       (on-load))
-    (when (and top-reached? on-top-reached)
+    (when (and (not down?) top-reached? on-top-reached)
       (on-top-reached))))
 
 (defn attach-listeners