69 lines
2.2 KiB
JavaScript
Executable File
69 lines
2.2 KiB
JavaScript
Executable File
/**
|
|
* Support for swipe and tap on touch devices
|
|
*
|
|
* This plugin implements navigation for plugin devices, via swiping left/right,
|
|
* or tapping on the left/right edges of the screen.
|
|
*
|
|
*
|
|
*
|
|
* Copyright 2015: Andrew Dunai (@and3rson)
|
|
* Modified to a plugin, 2016: Henrik Ingo (@henrikingo)
|
|
*
|
|
* MIT License
|
|
*/
|
|
/* global document, window */
|
|
( function( document, window ) {
|
|
"use strict";
|
|
|
|
// Touch handler to detect swiping left and right based on window size.
|
|
// If the difference in X change is bigger than 1/20 of the screen width,
|
|
// we simply call an appropriate API function to complete the transition.
|
|
var startX = 0;
|
|
var lastX = 0;
|
|
var lastDX = 0;
|
|
var threshold = window.innerWidth / 20;
|
|
|
|
document.addEventListener( "touchstart", function( event ) {
|
|
lastX = startX = event.touches[ 0 ].clientX;
|
|
} );
|
|
|
|
document.addEventListener( "touchmove", function( event ) {
|
|
var x = event.touches[ 0 ].clientX;
|
|
var diff = x - startX;
|
|
|
|
// To be used in touchend
|
|
lastDX = lastX - x;
|
|
lastX = x;
|
|
|
|
window.impress().swipe( diff / window.innerWidth );
|
|
} );
|
|
|
|
document.addEventListener( "touchend", function() {
|
|
var totalDiff = lastX - startX;
|
|
if ( Math.abs( totalDiff ) > window.innerWidth / 5 && ( totalDiff * lastDX ) <= 0 ) {
|
|
if ( totalDiff > window.innerWidth / 5 && lastDX <= 0 ) {
|
|
window.impress().prev();
|
|
} else if ( totalDiff < -window.innerWidth / 5 && lastDX >= 0 ) {
|
|
window.impress().next();
|
|
}
|
|
} else if ( Math.abs( lastDX ) > threshold ) {
|
|
if ( lastDX < -threshold ) {
|
|
window.impress().prev();
|
|
} else if ( lastDX > threshold ) {
|
|
window.impress().next();
|
|
}
|
|
} else {
|
|
|
|
// No movement - move (back) to the current slide
|
|
window.impress().goto( document.querySelector( "#impress .step.active" ) );
|
|
}
|
|
} );
|
|
|
|
document.addEventListener( "touchcancel", function() {
|
|
|
|
// Move (back) to the current slide
|
|
window.impress().goto( document.querySelector( "#impress .step.active" ) );
|
|
} );
|
|
|
|
} )( document, window );
|