' + _options.navText[0] + '
' + _options.navText[1] + '
');
var prev_btn = $this.find('.cv-prev')[0],
next_btn = $this.find('.cv-next')[0];
prev_btn.addEventListener('touchend', touchHandler, true);
prev_btn.addEventListener('MSPointerUp', touchHandler, true);
prev_btn.addEventListener('click', prevClick, false);
next_btn.addEventListener('touchend', touchHandler, true);
next_btn.addEventListener('MSPointerUp', touchHandler, true);
next_btn.addEventListener('click', nextClick, false);
}
$this.on('goTo', goTo);
moveTo(0);
return true;
}
if(!init(element, options))
return false;
var is_mousedown = false;
function mouseHandler(e){
var diff = e.clientY - _current_item_pos;
switch(e.type){
case 'mousedown':
is_mousedown = true;
_current_item_pos = diff;
break;
case 'mousemove':
if(is_mousedown)
moveByMouse(diff);
break;
case 'mouseup':
default:
if(is_mousedown) {
if(diff > 0) diff = 0;
moveFinal(diff);
is_mousedown = false;
}
}
}
var clickms = 100,
lastTouchDown = -1;
function touchHandler(e){
// https://stackoverflow.com/questions/5186441/javascript-drag-and-drop-for-touch-devices#6362527
var touch = e.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvent'),
d = new Date(),
type = null;
switch(e.type){
case 'touchstart':
type = 'mousedown';
lastTouchDown = d.getTime();
break;
case 'touchmove':
type = 'mousemove';
lastTouchDown = -1;
break;
case 'touchend':
if(lastTouchDown > -1 && (d.getTime() - lastTouchDown) < clickms){
lastTouchDown = -1;
type = 'click';
break;
}
type = 'mouseup';
break;
case 'touchcancel':
default:
return;
}
simulatedEvent.initMouseEvent(type, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
touch.target.dispatchEvent(simulatedEvent);
e.preventDefault();
}
function moveByMouse(pos){
if(pos > 0) pos /= 5;
if(pos < _last_item_pos) pos = _last_item_pos + (pos - _last_item_pos) / 5;
$stage.css('transition', 'none');
$this.addClass('cv-grab');
move(pos);
}
function moveFinal(pos){
$stage.css('transition', 'all 0.25s ease');
$this.removeClass('cv-grab');
moveTo(Math.round(-pos / _items_outer_height));
}
function move(pos){
$stage.css('transform', 'translateY(' + pos + 'px)');
}
// 1: first element
function goTo(e, n){
if(typeof n != 'undefined' && $.isNumeric(n) && Math.floor(n) == n)
moveTo(n - 1);
}
// 0: first element
function moveTo(n){
if(n < 0) n = 0;
if(n > _last_item) n = _last_item;
_current_item = n;
$items.removeClass('active');
$items.slice(n, (_options.items + n)).addClass('active');
_current_item_pos = -_items_outer_height * n;
move(_current_item_pos);
}
/*
replaced by css transition
function slideTop(pos){
var mem = pos,
interval = setInterval(function(){
mem -= 10;
if(mem < 0){
mem = 0;
clearInterval(interval);
}
move(mem);
}, 1);
}
*/
function prevClick(){
moveTo(_current_item - 1);
}
function nextClick(){
moveTo(_current_item + 1);
}
};
function init(el, args){
if(typeof args == 'object' || typeof args == 'undefined'){
var options = $.extend({}, defaults_options, args);
carouselVerticalClass(el, options);
}
}
var length = this.length;
if(length < 1) return this;
if(typeof argumentss == 'undefined') argumentss = defaults_options;
if(length > 1)
for(var c = 0; c < length; c++)
init(this[c], argumentss);
else
init(this[0], argumentss);
return this;
}
});
})(jQuery);