},
move: function(event) {

// ensure swiping with one touch and not pinching
if ( event.touches.length > 1 || event.scale && event.scale !== 1) return

if (options.disableScroll) event.preventDefault();

var touches = event.touches[0];

// measure change in x and y
delta = {
x: touches.pageX - start.x,
y: touches.pageY - start.y
}

// determine if scrolling test has run - one time test
if ( typeof isScrolling == 'undefined') {
isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) );
}

// if user is not trying to scroll vertically
if (!isScrolling) {

// prevent native scrolling
event.preventDefault();

// stop slideshow
stop();

// increase resistance if first or last slide
if (options.continuous) { // we don't add resistance at the end

translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0);
translate(index, delta.x + slidePos[index], 0);
translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0);

} else {

delta.x =
delta.x /
( (!index && delta.x > 0 // if first slide and sliding left
|| index == slides.length - 1 // or if last slide and sliding right
&& delta.x < 0 // and if sliding at all
) ?
( Math.abs(delta.x) / width + 1 ) // determine resistance level
: 1 ); // no resistance if false

// translate 1:1
translate(index-1, delta.x + slidePos[index-1], 0);
translate(index, delta.x + slidePos[index], 0);
translate(index+1, delta.x + slidePos[index+1], 0);
}

}

},
end: function(event) {

// measure duration
var duration = +new Date - start.time;

// determine if slide attempt triggers next/prev slide
var isValidSlide =
Number(duration) < 250 // if slide duration is less than 250ms
&& Math.abs(delta.x) > 20 // and if slide amt is greater than 20px
|| Math.abs(delta.x) > width/2; // or if slide amt is greater than half the width

// determine if slide attempt is past start and end
var isPastBounds =
!index && delta.x > 0 // if first slide and slide amt is greater than 0
|| index == slides.length - 1 && delta.x < 0; // or if last slide and slide amt is less than 0

if (options.continuous) isPastBounds = false;

// determine direction of swipe (true:right, false:left)
var direction = delta.x < 0;

// if not scrolling vertically
if (!isScrolling) {

if (isValidSlide && !isPastBounds) {

if (direction) {

if (options.continuous) { // we need to get the next in this direction in place

move(circle(index-1), -width, 0);
move(circle(index+2), width, 0);

} else {
move(index-1, -width, 0);
}

move(index, slidePos[index]-width, speed);
move(circle(index+1), slidePos[circle(index+1)]-width, speed);
index = circle(index+1);

} else {
if (options.continuous) { // we need to get the next in this direction in place

move(circle(index+1), width, 0);
move(circle(index-2), -width, 0);

} else {
move(index+1, width, 0);
}

move(index, slidePos[index]+width, speed);
move(circle(index-1), slidePos[circle(index-1)]+width, speed);
index = circle(index-1);

}

options.callback && options.callback(index, slides[index]);

} else {

if (options.continuous) {

move(circle(index-1), -width, speed);
move(index, 0, speed);
move(circle(index+1), width, speed);

} else {

move(index-1, -width, speed);
move(index, 0, speed);
move(index+1, width, speed);
}

}

}

// kill touchmove and touchend event listeners until touchstart called again
element.removeEventListener('touchmove', events, false)
element.removeEventListener('touchend', events, false)

},
transitionEnd: function(event) {

if (parseInt(event.target.getAttribute('data-index'), 10) == index) {

if (delay) begin();

options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);

}

}

}

// trigger setup
setup();

// start auto slideshow if applicable
if (delay) begin();


// add event listeners
if (browser.addEventListener) {

// set touchstart event on element
if (browser.touch) element.addEventListener('touchstart', events, false);

if (browser.transitions) {
element.addEventListener('webkitTransitionEnd', events, false);
element.addEventListener('msTransitionEnd', events, false);
element.addEventListener('oTransitionEnd', events, false);
element.addEventListener('otransitionend', events, false);
element.addEventListener('transitionend', events, false);
}

// set resize event on window
window.addEventListener('resize', events, false);

} else {

window.onresize = function () { setup() }; // to play nice with old IE

}

// expose the Swipe API
return {
setup: function() {

setup();

},
slide: function(to, speed) {

// cancel slideshow
stop();

slide(to, speed);

},
prev: function() {

// cancel slideshow
stop();

prev();

},
next: function() {

// cancel slideshow
stop();

next();

},
getPos: function() {

// return current index position
return index;

},
getNumSlides: function() {

// return total number of slides

Prev | Next
Pg.: 1 ... 13 14 15 16 17 18 19 20 21 22 23


Back to home | File page

Subscribe | Register | Login | N