ugrás a tartalomhoz

Swipe event érzékelés

gabesz666 · 2012. Dec. 17. (H), 10.13
Sziasztok!

Egy weboldal mobilos verzióját fejlesztem épp. Vannak cikkek ezen az oldalon és egy cikk több oldalból áll általában. A mobilos verzióban úgy kéne ennek működnie, hogy ha a #content div fölött balra swipe-ol a user, akkor töltse be a következő oldalt, ha pedig jobbra, akkor az előző oldalt. Egészen egyszerű is lenne az egyszeri fejlesztő élete, ha nem lenne egy szép bug a böngészőben/androidban. Workaround persze van: megkell hívni az event.preventDefault metódust. Ezzel azonban az a probléma, hogy kinagyított oldal esetén gyakorlatilag nem működik sem a nagyítás/kicsinyítés, sem a mozgatás. Egyelőre úgy sikerült csak megoldanom az oldalváltást, hogy csak akkor vált, ha az oldal nincs kinagyítva. Ez így nem a legszebb megoldás, így ha valakinek van ötlete a probléma megoldására, ne tartsa magában! :)

(Ui.: jQuery Mobile-t és különböző libeket próbáltam már, sajnos nem sok sikerrel)

Így fest jelenleg a kód:

var startTime,
	startEvent,
	endEvent,
	zoomLevel;

window.addEventListener('touchstart', function(event) {

	startTime = Date.now();
	startEvent = event;
	zoomLevel = window.innerWidth / $('body').width();

	if(event.touches.length === 1 && zoomLevel > 0.99) {
		// Csak így fut le a touchend event a böngésző bug miatt
		event.preventDefault();
	}

}, false);

window.addEventListener('touchmove', function(event) {

	var sensitivity = 50,
		deltaX, deltaY, quickSwipe = false;
		zoomLevel = window.innerWidth / $('body').width();

	if((endEvent && "touches" in endEvent) && (event && "touches" in event)) {
		deltaX = event.touches[0].pageX - endEvent.touches[0].pageX;
		deltaY = event.touches[0].pageY - endEvent.touches[0].pageY;

		quickSwipe = Math.abs(deltaX) > sensitivity;
	}
	
	endEvent = event;
	
	if(event.touches.length === 1 && zoomLevel > 0.99 && quickSwipe) {
		event.preventDefault();
	}

}, false);

window.addEventListener('touchend',function(event) {
	
	if(!endEvent || !("touches" in endEvent) || endEvent.touches.length === 2) {
		return;
	}

	if(Date.now() - startTime < 250) {
		
		if(startEvent.touches[0].pageX > endEvent.touches[0].pageX) {

			var nextPageAnchor = $(".highbut").next("a");
			
			if(endEvent.touches.length === 1 && nextPageAnchor.length > 0) {
				location.href = nextPageAnchor.attr("href");
			}

		}
		else {
	
			var prevPageAnchor = $(".highbut").prev("a");
			
			if(endEvent.touches.length === 1 && prevPageAnchor.length > 0) {
				location.href = prevPageAnchor.attr("href");
			}

		}

	}

}, false);
 
1

jQuery.event.swipe

T.G · 2012. Dec. 17. (H), 12.30
Szerintem ezzel érdemes óvatosan bánni, mert nem biztos, hogy ki tudod találni (biztos nem tudod kitalálni) minden esetben, hogy a juzer mit szeretett volna? Scroll-t vagy swipe-t?
Mindenesetre szerintem ez egy elfogathatóan működő példa: http://stephband.info/jquery.event.swipe/
2

használj külső könyvtárat

gyoridavid · 2012. Dec. 29. (Szo), 15.25
ezt ajánlom: hammer.js