|
182 | 182 | } |
183 | 183 | cacheMapping[data.id] = JSON.stringify(data); |
184 | 184 | window.history.replaceState(data.id, data.title, data.url); |
185 | | - domCache[data.id] = document.body.cloneNode(true); |
186 | 185 | }; |
187 | 186 |
|
188 | 187 | var cachePush = function () { |
|
200 | 199 | delete cacheMapping[cacheBackStack.shift()]; |
201 | 200 | } |
202 | 201 |
|
203 | | - window.history.pushState(null, '', cacheMapping[PUSH.id].url); |
| 202 | + window.history.pushState(null, '', getCached(PUSH.id).url); |
204 | 203 |
|
205 | 204 | cacheMapping.cacheForwardStack = JSON.stringify(cacheForwardStack); |
206 | 205 | cacheMapping.cacheBackStack = JSON.stringify(cacheBackStack); |
|
331 | 330 | swapContent( |
332 | 331 | (activeObj.contents || activeDom).cloneNode(true), |
333 | 332 | document.querySelector('.content'), |
334 | | - transition |
| 333 | + transition, function() { |
| 334 | + triggerStateChange(); |
| 335 | + } |
335 | 336 | ); |
336 | 337 |
|
337 | 338 | PUSH.id = id; |
|
383 | 384 | }); |
384 | 385 | } |
385 | 386 |
|
| 387 | + cacheCurrentContent(); |
| 388 | + |
386 | 389 | if (options.timeout) { |
387 | 390 | options._timeout = setTimeout(function () { xhr.abort('timeout'); }, options.timeout); |
388 | 391 | } |
|
394 | 397 | } |
395 | 398 | }; |
396 | 399 |
|
| 400 | + function cacheCurrentContent() { |
| 401 | + domCache[PUSH.id] = document.body.cloneNode(true); |
| 402 | + } |
| 403 | + |
397 | 404 |
|
398 | 405 | // Main XHR handlers |
399 | 406 | // ================= |
|
713 | 720 | var slideNumber; |
714 | 721 | var isScrolling; |
715 | 722 | var scrollableArea; |
| 723 | + var startedMoving; |
716 | 724 |
|
717 | 725 | var getSlider = function (target) { |
718 | 726 | var i; |
|
773 | 781 | return; // Exit if a pinch || no slider |
774 | 782 | } |
775 | 783 |
|
| 784 | + // adjust the starting position if we just started to avoid jumpage |
| 785 | + if (!startedMoving) { |
| 786 | + pageX += (e.touches[0].pageX - pageX) - 1; |
| 787 | + } |
| 788 | + |
776 | 789 | deltaX = e.touches[0].pageX - pageX; |
777 | 790 | deltaY = e.touches[0].pageY - pageY; |
778 | 791 | pageX = e.touches[0].pageX; |
779 | 792 | pageY = e.touches[0].pageY; |
780 | 793 |
|
781 | | - if (typeof isScrolling === 'undefined') { |
| 794 | + if (typeof isScrolling === 'undefined' && startedMoving) { |
782 | 795 | isScrolling = Math.abs(deltaY) > Math.abs(deltaX); |
783 | 796 | } |
784 | 797 |
|
|
794 | 807 | slideNumber === lastSlide && deltaX < 0 ? (Math.abs(pageX) / sliderWidth) + 1.25 : 1; |
795 | 808 |
|
796 | 809 | slider.style.webkitTransform = 'translate3d(' + offsetX + 'px,0,0)'; |
| 810 | + |
| 811 | + // started moving |
| 812 | + startedMoving = true; |
797 | 813 | }; |
798 | 814 |
|
799 | 815 | var onTouchEnd = function (e) { |
800 | 816 | if (!slider || isScrolling) { |
801 | 817 | return; |
802 | 818 | } |
803 | 819 |
|
| 820 | + // we're done moving |
| 821 | + startedMoving = false; |
| 822 | + |
804 | 823 | setSlideNumber( |
805 | 824 | (+new Date()) - startTime < 1000 && Math.abs(deltaX) > 15 ? (deltaX < 0 ? -1 : 1) : 0 |
806 | 825 | ); |
|
0 commit comments