jQTouch icon indicating copy to clipboard operation
jQTouch copied to clipboard

Back button should restore previous page's scroll position

Open etaranov opened this issue 14 years ago • 4 comments

I have a list of items and preview page for each. When user tap back button he returned to top of list page. Is there a way to restore previous page Y-scroll position?

etaranov avatar Feb 22 '11 12:02 etaranov

Bump

eoma avatar Mar 18 '11 22:03 eoma

I've been looking into this, and it is not as easy as it might sound. I could capture scroll position and jump to it after slideright animation completes, but this looks like crap. What I'd like to do is "prescroll" the incoming page to the original position, but I haven't found a great way to do that yet. If someone wants to fork and figure it out, I'd be more than happy to merge it in.

jonathanstark avatar Mar 22 '11 17:03 jonathanstark

I created one patch in jqtouch rev 148 that i'm using in project i'm working on. It worked but i don't use animation. Probably this helps someone else or this feature will be added to new release :)

Here is a diff:

--- 1131
+++ 1132
@@ -228,6 +228,10 @@
                 // Remove all pages in front of the target page
                 hist.splice(0, numberOfPages);
                 animatePages(curPage.page, hist[0].page, curPage.animation, curPage.reverse === false);
+                
+// Eugene: added call for scrollTo - restoring last position of page
+                var yPosition = curPage.position ? curPage.position : 0;
+                window.scrollTo( 0, yPosition);
             } else {
                 location.hash = '#' + curPage.id;
             }
@@ -260,8 +264,11 @@
                 }
                 
             }
+// Eugene: get scrollTop value before animating
+            var scrollTop = document.body.scrollTop;
             if (animatePages(fromPage, toPage, animation, reverse)) {
-                addPageToHistory(toPage, animation, reverse);
+// Eugene: added argument with last y-position (scrollTop)
+                addPageToHistory(toPage, animation, reverse, scrollTop);
                 return publicObj;
             } else {
                 //console.error('Could not animate pages.');
@@ -333,7 +340,8 @@
             }
             return false;
         }
-        function addPageToHistory(page, animation, reverse) {
+// Eugene: added argument scrollTop - position of last page
+        function addPageToHistory(page, animation, reverse, scrollTop) {
             // Grab some info
             var pageId = page.attr('id');
             // Prepend info to page history
@@ -341,7 +349,9 @@
                 page: page,
                 animation: animation,
                 reverse: reverse || false,
-                id: pageId
\ No newline at end of file
+                id: pageId,
+// Eugene: added value scrollTop position of last page
+                position: scrollTop
\ No newline at end of file
             });
         }
         function animatePages(fromPage, toPage, animation, backwards) {

etaranov avatar Apr 14 '11 13:04 etaranov

Is there any progress on this issue? thanks.

cemsisman avatar Jul 03 '11 17:07 cemsisman