/*
* Touch Image Gallery (c) Dynamic Drive (www.dynamicdrive.com)
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
* Requires: jQuery 1.7 or higher
* Requires: jquery.touchSwipe.min.js
* Last updated: Aug 3rd, 2013:
* - Clicking on forward/back nav buttons no longer selects entire DIV
*/
(function($){
var gallerydefaults = {
width: 300,
height: 250,
navarea: '20%',
curslide: 0,
threshold: 75,
navbuttons : ['left.png', 'right.png', -10]
}
var swipeOptions={
triggerOnTouchEnd : true,
triggerOnTouchLeave : true,
allowPageScroll:"vertical"
}
var transform = typeof $(document.documentElement).css('transform') != "undefined" // test for support for CSS3 transform
var detecttouch = !!('ontouchstart' in window) || !!('ontouchstart' in document.documentElement) || !!window.ontouchstart || !!window.Touch || !!window.onmsgesturechange || (window.DocumentTouch && window.document instanceof window.DocumentTouch)
$.fn.touchgallery = function(options){
return this.each(function(){
var setting = $.extend({}, gallerydefaults, options)
$slideshow = $(this),
swipestart = false,
initialx = 0,
dist = 0,
swipecount = 0
var $belt = $slideshow.find('ul:eq(0)')
$belt.moveit = function(val){
//if (transform)
//this.css('transform', 'translateX(' + val + 'px)')
//else
this.css('left', val)
this.data('curleft', val)
}
var $lis = $belt.find('li')
var imgcount = $lis.length
var $jumptodiv = $('
')
.html(function(){
var bullets =''
for (var i=0; i● '
}
return bullets
}())
.appendTo($slideshow)
var $jumptobuttons = $jumptodiv.find('span')
var $navbuttons = $('')
.clone()
.addBack()
.eq(0)
.data({'dir': 'back'})
.html('')
.end()
.eq(1)
.data({'dir': 'forth'})
.css({left: 'auto', right: 0, textAlign: 'right'}).html('')
.end()
.on('selectstart', function(){
return false
})
.appendTo($slideshow)
if (!detecttouch)
$navbuttons.css('cursor', 'pointer')
$slideshow.on('mouseenter mouseleave', function(e){
var opacity = (e.type == 'mouseenter')? 1 : 0
$navbuttons.animate({opacity: opacity}, 200)
})
function navigate(keyword){
clearTimeout(setting.hidenavtimer)
var curslide = setting.curslide
switch (keyword){
case 'forth':
setting.curslide = (curslide < imgcount-1)? curslide + 1 : 0
break
case 'back':
setting.curslide = (curslide >0)? curslide - 1 : imgcount-1
break
default:
setting.curslide = parseInt(keyword)
}
$jumptobuttons.removeClass('selected').eq(setting.curslide).addClass('selected')
$belt.moveit( -setting.width * setting.curslide )
}
$slideshow.add($lis).css({
width: setting.width,
height: setting.height
})
$belt.css({width: setting.width * imgcount})
navigate(setting.curslide)
swipeOptions.swipeStatus = function(event, phase, direction, distance){
if (phase == 'start'){
swipestart = true
swipecount = 0
initialx = parseInt( $belt.data('curleft') )
dist = 0
}
else if (phase == "move" && swipestart){
dist = (direction == 'left'? -1 : 1) * distance + initialx
$belt.moveit( Math.min(dist, (setting.curslide+1) * setting.width) )
}
else if (phase == 'cancel'){
$belt.moveit( -setting.width * setting.curslide )
}
else if (phase == 'end'){
if (distance < setting.threshold){ // snap back
navigate(setting.curslide)
}
else{
swipecount ++
if (swipecount == 1){
navigate( (direction == 'left')? 'forth' : 'back' )
}
}
swipestart = false
}
}
swipeOptions.tap = function(event, obj){
$navbuttons.css({opacity: 1})
setting.hidenavtimer = setTimeout(function(){
$navbuttons.css({opacity: 0})
}, 2000)
}
$slideshow.swipe(swipeOptions)
$navbuttons.swipe({
tap: function(e){
var $target = $(this)
navigate( $target.data('dir') )
}
})
$jumptodiv.swipe({
tap: function(e){
var target = e.target || e.srcElement
if (target.tagName == 'SPAN'){
var $target = $(target)
navigate( parseInt($target.data('image')) )
}
}
})
})
}
}) (jQuery)