mirror of
				https://github.com/flynx/PortableMag.git
				synced 2025-10-31 12:00:11 +00:00 
			
		
		
		
	rewritten scroll handler in layout-iscroll2...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									c28a3bb116
								
							
						
					
					
						commit
						89c6d5191b
					
				| @ -20,8 +20,11 @@ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .current.page { | .current.page { | ||||||
|  | 	/* | ||||||
| 	z-index: 9000; | 	z-index: 9000; | ||||||
| 	box-shadow: 10px 10px 150px -50px black; | 	box-shadow: 10px 10px 150px -50px black; | ||||||
|  | 	border-bottom: solid yellow 10px; | ||||||
|  | 	*/ | ||||||
| } | } | ||||||
| /* | /* | ||||||
| .page:hover { | .page:hover { | ||||||
| @ -31,6 +34,9 @@ | |||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| .page { | .page { | ||||||
|  | 
 | ||||||
|  | 	vertical-align:top; | ||||||
|  | 
 | ||||||
| 	-webkit-transition: none; | 	-webkit-transition: none; | ||||||
| 	-moz-transition: none; | 	-moz-transition: none; | ||||||
| 	-o-transition: all 0 ease; | 	-o-transition: all 0 ease; | ||||||
| @ -104,102 +110,138 @@ $(document).ready(function(){ | |||||||
| 		function(k){console.log(k)})) | 		function(k){console.log(k)})) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	//logger = Logger() | 	window.THRESHOLD = 10 | ||||||
| 	var scrolling = false | 	var scroller = makeScrollHandler($('.viewer'), function(speed, distance){ | ||||||
| 	var _x = null | 		// XXX this is not too correct... | ||||||
| 	var _t = null | 		//		...make this mode specific... | ||||||
| 	var _s = null | 		if(getMagazineScale() >= 1){ | ||||||
| 	var _scale = null | 			var cur = $('.current.page') | ||||||
| 
 | 			if(distance > THRESHOLD){ | ||||||
| 	// XXX this is a stub, but need to keep the two types of events  | 				return nextPage(cur) | ||||||
| 	//		seporated as mouse events sometimes interfere with touch events... | 			} else if(distance < -THRESHOLD){ | ||||||
| 	if('ontouchmove' in window){ | 				return prevPage(cur) | ||||||
| 		// XXX STUB... | 			} | ||||||
| 		togglePageDragging('on') | 		} | ||||||
| 		$('.viewer') | 		setCurrentPage() | ||||||
| 			.on('touchstart', function(){ | 	}).start() | ||||||
| 				//logger.log('[touchstart]') |  | ||||||
| 				//_t = evt.timeStamp || Date.now(); |  | ||||||
| 				scrolling = true |  | ||||||
| 				//togglePageDragging('on') |  | ||||||
| 				_s = getMagazineShift() |  | ||||||
| 				_scale = getMagazineScale() |  | ||||||
| 			}) |  | ||||||
| 			.on('touchmove', function(evt){ |  | ||||||
| 				evt.preventDefault() |  | ||||||
| 				var pos_x = event.touches[0].pageX |  | ||||||
| 
 |  | ||||||
| 				if(_x == null){ |  | ||||||
| 					_x = pos_x |  | ||||||
| 				} |  | ||||||
| 				var x = pos_x |  | ||||||
| 				if(scrolling){ |  | ||||||
| 					//logger.log('>>>' + s) |  | ||||||
| 					_s += x - _x |  | ||||||
| 					shiftMagazineTo(_s, _scale) |  | ||||||
| 				} |  | ||||||
| 				_x = x |  | ||||||
| 			}) |  | ||||||
| 			.on('touchend', function(){ |  | ||||||
| 				//logger.log('[touchend]') |  | ||||||
| 				scrolling = false |  | ||||||
| 				//togglePageDragging('off') |  | ||||||
| 				_x = null |  | ||||||
| 				_s = null |  | ||||||
| 				_scale = null |  | ||||||
| 			}) |  | ||||||
| 
 |  | ||||||
| 	} else { |  | ||||||
| 		// XXX stub... |  | ||||||
| 		togglePageDragging('on') |  | ||||||
| 		$('.viewer') |  | ||||||
| 			.on('mousedown', function(){ |  | ||||||
| 				//logger.log('[touchstart]') |  | ||||||
| 				//_t = evt.timeStamp || Date.now(); |  | ||||||
| 				scrolling = true |  | ||||||
| 				//togglePageDragging('on') |  | ||||||
| 				_s = getMagazineShift() |  | ||||||
| 				_scale = getMagazineScale() |  | ||||||
| 			}) |  | ||||||
| 			.on('mousemove', function(evt){ |  | ||||||
| 				//var t = evt.timeStamp || Date.now(); |  | ||||||
| 				evt.preventDefault() |  | ||||||
| 				var pos_x = evt.clientX |  | ||||||
| 
 |  | ||||||
| 				if(_x == null){ |  | ||||||
| 					_x = pos_x |  | ||||||
| 				} |  | ||||||
| 				var x = pos_x |  | ||||||
| 				if(scrolling){ |  | ||||||
| 					_s += x - _x |  | ||||||
| 					shiftMagazineTo(_s, _scale) |  | ||||||
| 				} |  | ||||||
| 				_x = x |  | ||||||
| 			}) |  | ||||||
| 			.on('mouseup', function(){ |  | ||||||
| 				//logger.log('[touchend]') |  | ||||||
| 				scrolling = false |  | ||||||
| 				//togglePageDragging('off') |  | ||||||
| 				_x = null |  | ||||||
| 				_s = null |  | ||||||
| 				_scale = null |  | ||||||
| 			}) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	setMagazineScale(0.5) |  | ||||||
| 
 | 
 | ||||||
|  | 	//setMagazineScale(0.5) | ||||||
| 
 | 
 | ||||||
| 	// XXX need to setup style for android to work... | 	// XXX need to setup style for android to work... | ||||||
| 	$('.viewer').css({overflow: 'hidden'}) | 	$('.viewer').css({overflow: 'hidden'}) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	// expand the templates... | 	// expand the templates... | ||||||
| 	runMagazineTemplates() | 	runMagazineTemplates() | ||||||
| 
 | 
 | ||||||
| 	//setCurrentPage(0) | 	setCurrentPage(0) | ||||||
| 	//limit_scroll() | 	//limit_scroll() | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | function makeScrollHandler(root, callback){ | ||||||
|  | 
 | ||||||
|  | 	// local data... | ||||||
|  | 	var scrolling = false | ||||||
|  | 	var touch = false | ||||||
|  | 	var touches = 0 | ||||||
|  | 	var start | ||||||
|  | 	var prev_x | ||||||
|  | 	var prev_t | ||||||
|  | 	var shift | ||||||
|  | 	var scale | ||||||
|  | 	var x | ||||||
|  | 	var t | ||||||
|  | 	var dx | ||||||
|  | 	var dt | ||||||
|  | 
 | ||||||
|  | 	function startMoveHandler(evt, callback){ | ||||||
|  | 		prev_t = event.timeStamp || Date.now(); | ||||||
|  | 		if(event.touches != null){ | ||||||
|  | 			touch = true | ||||||
|  | 		} | ||||||
|  | 		scrolling = true | ||||||
|  | 		scroller.state = 'scrolling' | ||||||
|  | 		//root.trigger('userScrollStart') | ||||||
|  | 		//togglePageDragging('on') | ||||||
|  | 		shift = getMagazineShift() | ||||||
|  | 		scale = getMagazineScale() | ||||||
|  | 		// get the user coords... | ||||||
|  | 		prev_x = touch ? event.touches[0].pageX : evt.clientX | ||||||
|  | 		start = prev_x | ||||||
|  | 	} | ||||||
|  | 	// XXX add limits to this... | ||||||
|  | 	// XXX try and make this adaptive to stay ahead of the lags... | ||||||
|  | 	function moveHandler(evt){ | ||||||
|  | 		evt.preventDefault() | ||||||
|  | 		t = event.timeStamp || Date.now(); | ||||||
|  | 		// get the user coords... | ||||||
|  | 		x = touch ? event.touches[0].pageX : evt.clientX | ||||||
|  | 		touches = touch ? event.touches.length : 0 | ||||||
|  | 		if(scrolling){ | ||||||
|  | 			shift += x - prev_x | ||||||
|  | 			shiftMagazineTo(shift, scale) | ||||||
|  | 		} | ||||||
|  | 		dx = x - prev_x | ||||||
|  | 		dt = t - prev_t | ||||||
|  | 		prev_t = t | ||||||
|  | 		prev_x = x | ||||||
|  | 		//root.trigger('userScroll') | ||||||
|  | 	} | ||||||
|  | 	function endMoveHandler(evt){ | ||||||
|  | 		x = touch ? event.touches[0].pageX : evt.clientX | ||||||
|  | 		touch = false | ||||||
|  | 		scrolling = false | ||||||
|  | 		scroller.state = 'waiting' | ||||||
|  | 		touches = 0 | ||||||
|  | 		//togglePageDragging('off') | ||||||
|  | 		// XXX add speed to this... | ||||||
|  | 		//root.trigger('userScrollEnd') | ||||||
|  | 		callback && callback(dx/dt, start - x) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var scroller = { | ||||||
|  | 		start: function(){ | ||||||
|  | 			this.state = 'waiting' | ||||||
|  | 			// XXX STUB: this makes starting the scroll a bit sluggish,  | ||||||
|  | 			//		find a faster way... | ||||||
|  | 			togglePageDragging('on') | ||||||
|  | 
 | ||||||
|  | 			// NOTE: if we bind both touch and mouse events, on touch devices they  | ||||||
|  | 			//		might start interfering with each other... | ||||||
|  | 			if('ontouchmove' in window){ | ||||||
|  | 				root | ||||||
|  | 					.on('touchstart', startMoveHandler) | ||||||
|  | 					.on('touchmove', moveHandler)  | ||||||
|  | 					.on('touchend', endMoveHandler) | ||||||
|  | 			} else { | ||||||
|  | 				root | ||||||
|  | 					.on('mousedown', startMoveHandler)  | ||||||
|  | 					.on('mousemove', moveHandler)  | ||||||
|  | 					.on('mouseup', endMoveHandler)  | ||||||
|  | 			} | ||||||
|  | 			return this | ||||||
|  | 		}, | ||||||
|  | 		stop: function(){ | ||||||
|  | 			this.state = 'stopped' | ||||||
|  | 			if('ontouchmove' in window){ | ||||||
|  | 				root | ||||||
|  | 					.off('touchstart', startMoveHandler) | ||||||
|  | 					.off('touchmove', moveHandler)  | ||||||
|  | 					.off('touchend', endMoveHandler) | ||||||
|  | 			} else { | ||||||
|  | 				root | ||||||
|  | 					.off('mousedown', startMoveHandler)  | ||||||
|  | 					.off('mousemove', moveHandler)  | ||||||
|  | 					.off('mouseup', endMoveHandler)  | ||||||
|  | 			} | ||||||
|  | 			return this | ||||||
|  | 		}, | ||||||
|  | 		// NOTE: this is updated live but not used by the system in any way... | ||||||
|  | 		state: 'stopped' | ||||||
|  | 	} | ||||||
|  | 	return scroller | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| var SCROLL_LIMIT = 800 * 1.5 | var SCROLL_LIMIT = 800 * 1.5 | ||||||
| 
 | 
 | ||||||
| function setup_scroll_limiter(){ | function setup_scroll_limiter(){ | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								layout.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								layout.js
									
									
									
									
									
								
							| @ -78,6 +78,7 @@ var togglePageView = createCSSClassToggler( | |||||||
| 
 | 
 | ||||||
| /********************************************************* helpers ***/ | /********************************************************* helpers ***/ | ||||||
| 
 | 
 | ||||||
|  | // XXX make this work for narrow and left/right alligned pages...
 | ||||||
| function getPageNumber(page){ | function getPageNumber(page){ | ||||||
| 	// a page is given...
 | 	// a page is given...
 | ||||||
| 	if(page != null){ | 	if(page != null){ | ||||||
| @ -124,7 +125,7 @@ function setMagazineScale(scale){ | |||||||
| 		// XXX also add margins at top and bottom for vertical elements...
 | 		// XXX also add margins at top and bottom for vertical elements...
 | ||||||
| 	}) | 	}) | ||||||
| 	setElementScale(mag, scale) | 	setElementScale(mag, scale) | ||||||
| 	setCurrentPage() | 	//setCurrentPage()
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -164,11 +165,11 @@ function setCurrentPage(n){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| function nextPage(){ | function nextPage(page){ | ||||||
| 	setCurrentPage(getPageNumber()+1) | 	setCurrentPage(getPageNumber(page)+1) | ||||||
| } | } | ||||||
| function prevPage(){ | function prevPage(page){ | ||||||
| 	var n = getPageNumber()-1 | 	var n = getPageNumber(page)-1 | ||||||
| 	n = n < 0 ? 0 : n | 	n = n < 0 ? 0 : n | ||||||
| 	setCurrentPage(n) | 	setCurrentPage(n) | ||||||
| } | } | ||||||
|  | |||||||
| @ -216,6 +216,7 @@ function getPageAt(n){ | |||||||
| 	return $(page[n]) | 	return $(page[n]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NOTE: at this point this works only on the X axis...
 | ||||||
| function shiftMagazineTo(offset, scale){ | function shiftMagazineTo(offset, scale){ | ||||||
| 	var mag = $('.magazine') | 	var mag = $('.magazine') | ||||||
| 	if(scale == null){ | 	if(scale == null){ | ||||||
| @ -368,7 +369,7 @@ function makeSwipeHandler(){ | |||||||
| 	var scale | 	var scale | ||||||
| 	var mag | 	var mag | ||||||
| 	var pos | 	var pos | ||||||
| 	var viewer | 	var viewer = $('.viewer') | ||||||
| 
 | 
 | ||||||
| 	return function(evt, phase, direction, distance, duration, fingers){ | 	return function(evt, phase, direction, distance, duration, fingers){ | ||||||
| 
 | 
 | ||||||
| @ -384,7 +385,6 @@ function makeSwipeHandler(){ | |||||||
| 			scale = getPageScale() | 			scale = getPageScale() | ||||||
| 			mag = $('.magazine') | 			mag = $('.magazine') | ||||||
| 			pos = $('.navigator .bar .indicator') | 			pos = $('.navigator .bar .indicator') | ||||||
| 			viewer = $('.viewer') |  | ||||||
| 
 | 
 | ||||||
| 		// XXX make this drag pages that are larger than view before dragging outside...
 | 		// XXX make this drag pages that are larger than view before dragging outside...
 | ||||||
| 		} else if(phase=='move'  | 		} else if(phase=='move'  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user