mirror of
				https://github.com/flynx/PortableMag.git
				synced 2025-10-30 19:40:12 +00:00 
			
		
		
		
	added inertial scroll and scroll limiting in ribbon mode...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									c16d421083
								
							
						
					
					
						commit
						a1f8488488
					
				
							
								
								
									
										30
									
								
								TODO.otl
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								TODO.otl
									
									
									
									
									
								
							| @ -5,21 +5,14 @@ | |||||||
| 		| touchdown point. | 		| touchdown point. | ||||||
| 		[_] BUG: no drag threshold on excludedElements (TouchSwipe) | 		[_] BUG: no drag threshold on excludedElements (TouchSwipe) | ||||||
| 		| stalled... | 		| stalled... | ||||||
| 	[_] 64% general todo | 	[_] 65% general todo | ||||||
| 		[_] 0% STUB: build a UI around current iscroll to allow time for internal scroll devel | 		[_] 60% build a custom scroll lib... | ||||||
| 			[_] manually resize pages to screen on load | 			[X] 100% features: | ||||||
| 			[_] scale .content ot fit in page |  | ||||||
| 			| this will temporarily disable these features: |  | ||||||
| 				groups (depends on style) |  | ||||||
| 				page background images |  | ||||||
| 			[_] disable snapping in ribbon mode |  | ||||||
| 		[_] 36% build a custom scroll lib... |  | ||||||
| 			[_] 66% features: |  | ||||||
| 				[X] drag/scroll | 				[X] drag/scroll | ||||||
| 				[_] inertial | 				[X] inertial | ||||||
| 				[X] snap | 				[X] snap | ||||||
| 				| if enabled, on release, detect nearest snap-point and scroll to it. | 				| if enabled, on release, detect nearest snap-point and scroll to it. | ||||||
| 			[_] 65% tragets | 			[X] 100% tragets | ||||||
| 				[X] smooth scroll on devices (iscroll) | 				[X] smooth scroll on devices (iscroll) | ||||||
| 				| adaptive transitions, etc. | 				| adaptive transitions, etc. | ||||||
| 				[X] snap scroll to markers (a-la iscroll) | 				[X] snap scroll to markers (a-la iscroll) | ||||||
| @ -27,22 +20,19 @@ | |||||||
| 						[X] left (iscroll) | 						[X] left (iscroll) | ||||||
| 						[X] center | 						[X] center | ||||||
| 						[X] right | 						[X] right | ||||||
| 				[_] flexible event system | 				[X] flexible event system | ||||||
| 					[X] pre/post events | 					[X] pre/post events | ||||||
| 					[_] ability to modify action data before it runs | 					[X] ability to cancel current action | ||||||
| 					[_] ability to cancel current action |  | ||||||
| 					| like stop scrolling at a given point. | 					| like stop scrolling at a given point. | ||||||
| 					[_] ability to take over and do something manually |  | ||||||
| 				[_] all actions callable |  | ||||||
| 				[X] both x and y axis support (x is a priority) | 				[X] both x and y axis support (x is a priority) | ||||||
| 			[_] scroll phases | 			[X] scroll phases | ||||||
| 				[X] user scroll phase | 				[X] user scroll phase | ||||||
| 				| from mousedown/touchstart and to mouseup/touchend | 				| from mousedown/touchstart and to mouseup/touchend | ||||||
| 				[_] auto scroll phase | 				[X] auto scroll phase | ||||||
| 				| from mouseup/touchend and untill scrollend | 				| from mouseup/touchend and untill scrollend | ||||||
| 				| | 				| | ||||||
| 				| must account for speed... | 				| must account for speed... | ||||||
| 					[_] momentum | 					[X] momentum | ||||||
| 					[X] snap | 					[X] snap | ||||||
| 			[_] 0% actions | 			[_] 0% actions | ||||||
| 				[_] 0% .scrollTo(target) | 				[_] 0% .scrollTo(target) | ||||||
|  | |||||||
| @ -115,6 +115,7 @@ $(document).ready(function(){ | |||||||
| 
 | 
 | ||||||
| 	window.CLICK_THRESHOLD = 10 | 	window.CLICK_THRESHOLD = 10 | ||||||
| 	window.SNAP_TO_PAGES_IN_RIBBON = false | 	window.SNAP_TO_PAGES_IN_RIBBON = false | ||||||
|  | 	window.INITIAL_TIME = 200 | ||||||
| 
 | 
 | ||||||
| 	// XXX make this a default setup in the lib... | 	// XXX make this a default setup in the lib... | ||||||
| 	window.MagazineScroller = makeScrollHandler($('.viewer'), { | 	window.MagazineScroller = makeScrollHandler($('.viewer'), { | ||||||
| @ -149,23 +150,89 @@ $(document).ready(function(){ | |||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
|  | 			var pages = $('.page') | ||||||
|  | 			var mag = $('.magazine') | ||||||
|  | 
 | ||||||
| 			// swipe left/right... | 			// swipe left/right... | ||||||
| 			// XXX add swipe up/down... | 			// XXX add swipe up/down... | ||||||
| 			if(!isNavigationViewRelative()){ | 			if(!isNavigationViewRelative()){ | ||||||
| 				var cur = $('.current.page') | 				var cur = $('.current.page') | ||||||
| 				if(distance >= CLICK_THRESHOLD){ | 				if(distance >= CLICK_THRESHOLD){ | ||||||
|  | 					setTransitionDuration(mag, INITIAL_TIME) | ||||||
| 					return nextPage(cur) | 					return nextPage(cur) | ||||||
| 				} else if(distance <= -CLICK_THRESHOLD){ | 				} else if(distance <= -CLICK_THRESHOLD){ | ||||||
|  | 					setTransitionDuration(mag, INITIAL_TIME) | ||||||
| 					return prevPage(cur) | 					return prevPage(cur) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			// this makes things snap... | 			// this makes things snap... | ||||||
| 			// XXX add innertia if we are not snapping... | 			if(SNAP_TO_PAGES_IN_RIBBON){ | ||||||
| 			SNAP_TO_PAGES_IN_RIBBON && setCurrentPage() | 				return setCurrentPage() | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// innertial scroll... | ||||||
|  | 			var t = INITIAL_TIME * (1+Math.abs(speed)) | ||||||
|  | 			// XXX this is only horisontal at this point... | ||||||
|  | 			var at = getElementShift(mag).left | ||||||
|  | 			var to = at + (t*speed) | ||||||
|  | 			var first = getMagazineOffset(pages.first(), null, 'center') | ||||||
|  | 			var last = getMagazineOffset(pages.last(), null, 'center') | ||||||
|  | 
 | ||||||
|  | 			// filter out really small speeds... | ||||||
|  | 			if(Math.abs(speed) > 0.5){ | ||||||
|  | 				// check bounds... | ||||||
|  | 				if(to > first){ | ||||||
|  | 					// trim the time proportionally... | ||||||
|  | 					var _t = t | ||||||
|  | 					t = Math.abs(t * ((at-first)/(at-to))) | ||||||
|  | 					console.log(_t, t) | ||||||
|  | 					to = first | ||||||
|  | 					setTransitionEasing(mag, 'linear') | ||||||
|  | 				} else if(to < last){ | ||||||
|  | 					// trim the time proportionally... | ||||||
|  | 					var _t = t | ||||||
|  | 					t = Math.abs(t * ((at-last)/(at-to))) | ||||||
|  | 					console.log(_t, t) | ||||||
|  | 					to = last | ||||||
|  | 					setTransitionEasing(mag, 'linear') | ||||||
|  | 
 | ||||||
|  | 				} else { | ||||||
|  | 					setTransitionEasing(mag, 'ease-out') | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				setTransitionDuration(mag, t) | ||||||
|  | 				setElementTransform(mag, to) | ||||||
|  | 
 | ||||||
|  | 				// restore defaults... | ||||||
|  | 				// XXX this is a bit dumb at this point... | ||||||
|  | 				// XXX run this as a transition end handler... | ||||||
|  | 				setTimeout(function(){ | ||||||
|  | 					setTransitionEasing(mag, 'ease-out') | ||||||
|  | 					setTransitionDuration(mag, INITIAL_TIME) | ||||||
|  | 				}, t+10) | ||||||
|  | 
 | ||||||
|  | 			// do not let the user scroll out of view... | ||||||
|  | 			} else { | ||||||
|  | 				if(at > first){ | ||||||
|  | 					setTransitionEasing(mag, 'ease-in') | ||||||
|  | 					setTransitionDuration(mag, INITIAL_TIME) | ||||||
|  | 					//setCurrentPage(0) | ||||||
|  | 					setElementTransform(mag, first) | ||||||
|  | 
 | ||||||
|  | 				} else if(at < last){ | ||||||
|  | 					setTransitionEasing(mag, 'ease-in') | ||||||
|  | 					setTransitionDuration(mag, INITIAL_TIME) | ||||||
|  | 					//setCurrentPage(-1) | ||||||
|  | 					setElementTransform(mag, last) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 		}, | 		}, | ||||||
| 	}).start() | 	}).start() | ||||||
| 
 | 
 | ||||||
|  | 	// XXX stub... | ||||||
|  | 	setTransitionEasing($('.magazine'), 'ease-out') | ||||||
|  | 
 | ||||||
| 	// expand the templates... | 	// expand the templates... | ||||||
| 	runMagazineTemplates() | 	runMagazineTemplates() | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								lib/jli.js
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								lib/jli.js
									
									
									
									
									
								
							| @ -315,6 +315,19 @@ function getElementShift(elem){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | function setTransitionEasing(elem, ease){ | ||||||
|  | 	if(typeof(ms) == typeof(0)){ | ||||||
|  | 		ms = ms + 'ms' | ||||||
|  | 	} | ||||||
|  | 	return elem.css({ | ||||||
|  | 		'transition-timing-function': ease,  | ||||||
|  | 		'-moz-transition-timing-function': ease, | ||||||
|  | 		'-o-transition-timing-function': ease, | ||||||
|  | 		'-ms-transition-timing-function': ease, | ||||||
|  | 		'-webkit-transition-timing-function': ease | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function setTransitionDuration(elem, ms){ | function setTransitionDuration(elem, ms){ | ||||||
| 	if(typeof(ms) == typeof(0)){ | 	if(typeof(ms) == typeof(0)){ | ||||||
| 		ms = ms + 'ms' | 		ms = ms + 'ms' | ||||||
| @ -611,7 +624,7 @@ function makeScrollHandler(root, config){ | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		// XXX get real transition duration...
 | 		// XXX get real transition duration...
 | ||||||
| 		setTransitionDuration($('.magazine'), 200) | 		setTransitionDuration(scrolled, 200) | ||||||
| 
 | 
 | ||||||
| 		x = touch ? event.changedTouches[0].pageX : evt.clientX | 		x = touch ? event.changedTouches[0].pageX : evt.clientX | ||||||
| 		y = touch ? event.changedTouches[0].pageY : evt.clientY | 		y = touch ? event.changedTouches[0].pageY : evt.clientY | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user