|
31 | 31 | supportSVG = !! document.createElementNS && !! document.createElementNS( 'http://www.w3.org/2000/svg', 'svg').createSVGRect, |
32 | 32 | winWidth = window.innerWidth ? window.innerWidth : $( window ).width(), |
33 | 33 | winHeight = window.innerHeight ? window.innerHeight : $( window ).height(), |
| 34 | + currentX = 0, |
34 | 35 | /* jshint multistr: true */ |
35 | 36 | html = '<div id="swipebox-overlay">\ |
36 | 37 | <div id="swipebox-slider"></div>\ |
|
160 | 161 |
|
161 | 162 | if ( $this.doCssTrans() ) { |
162 | 163 | $( '#swipebox-slider' ).css( { |
163 | | - '-webkit-transition' : 'left 0.4s ease', |
164 | | - '-moz-transition' : 'left 0.4s ease', |
165 | | - '-o-transition' : 'left 0.4s ease', |
166 | | - '-khtml-transition' : 'left 0.4s ease', |
167 | | - 'transition' : 'left 0.4s ease' |
| 164 | + '-webkit-transition' : '-webkit-transform 0.4s ease', |
| 165 | + '-moz-transition' : '-moz-transform 0.4s ease', |
| 166 | + '-o-transition' : '-o-transform 0.4s ease', |
| 167 | + '-khtml-transition' : '-khtml-transform 0.4s ease', |
| 168 | + '-ms-transition' : '-ms-transform 0.4s ease', |
| 169 | + 'transition' : 'transform 0.4s ease' |
168 | 170 | } ); |
169 | 171 | $( '#swipebox-overlay' ).css( { |
170 | 172 | '-webkit-transition' : 'opacity 1s ease', |
171 | 173 | '-moz-transition' : 'opacity 1s ease', |
172 | 174 | '-o-transition' : 'opacity 1s ease', |
173 | 175 | '-khtml-transition' : 'opacity 1s ease', |
| 176 | + '-ms-transition' : 'opacity 1s ease', |
174 | 177 | 'transition' : 'opacity 1s ease' |
175 | 178 | } ); |
176 | 179 | $( '#swipebox-action, #swipebox-caption' ).css( { |
177 | 180 | '-webkit-transition' : '0.5s', |
178 | 181 | '-moz-transition' : '0.5s', |
179 | 182 | '-o-transition' : '0.5s', |
180 | 183 | '-khtml-transition' : '0.5s', |
| 184 | + '-ms-transition' : '0.5s', |
181 | 185 | 'transition' : '0.5s' |
182 | 186 | } ); |
183 | 187 | } |
|
291 | 295 | gesture : function () { |
292 | 296 |
|
293 | 297 | var $this = this, |
294 | | - distance = null, |
| 298 | + hDistance = null, |
295 | 299 | vDistance = null, |
| 300 | + hDistanceLast = null, |
| 301 | + vDistanceLast = null, |
296 | 302 | vSwipe = false, |
297 | | - swipMinDistance = 10, |
| 303 | + hSwipe = false, |
| 304 | + hSwipMinDistance = 10, |
298 | 305 | vSwipMinDistance = 50, |
299 | 306 | startCoords = {}, |
300 | 307 | endCoords = {}, |
|
309 | 316 |
|
310 | 317 | $( this ).addClass( 'touching' ); |
311 | 318 |
|
| 319 | + vSwipe = false; |
| 320 | + hSwipe = false; |
| 321 | + |
312 | 322 | endCoords = event.originalEvent.targetTouches[0]; |
313 | 323 | startCoords.pageX = event.originalEvent.targetTouches[0].pageX; |
314 | 324 | startCoords.pageY = event.originalEvent.targetTouches[0].pageY; |
315 | 325 |
|
| 326 | + $('#swipebox-slider').css({ |
| 327 | + '-webkit-transform' : 'translateX(' + currentX +'%)', |
| 328 | + '-moz-transform' : 'translateX(' + currentX + '%)', |
| 329 | + '-o-transform' : 'translateX(' + currentX + '%)', |
| 330 | + '-khtml-transform' : 'translateX(' + currentX + '%)', |
| 331 | + '-ms-transform' : 'translateX(' + currentX + '%)', |
| 332 | + 'transform' : 'translateX(' + currentX + '%)', |
| 333 | + }); |
| 334 | + |
316 | 335 | $( '.touching' ).bind( 'touchmove',function( event ) { |
317 | 336 | event.preventDefault(); |
318 | 337 | event.stopPropagation(); |
319 | 338 | endCoords = event.originalEvent.targetTouches[0]; |
320 | 339 |
|
321 | | - if ( plugin.settings.closeBySwipe ) { |
| 340 | + if ( !hSwipe && plugin.settings.closeBySwipe ) { |
| 341 | + vDistanceLast = vDistance; |
322 | 342 | vDistance = endCoords.pageY - startCoords.pageY; |
323 | 343 | if ( Math.abs( vDistance ) >= vSwipMinDistance || vSwipe ) { |
324 | 344 | var opacity = 0.75 - Math.abs(vDistance) / slider.height(); |
|
330 | 350 | } |
331 | 351 | } |
332 | 352 |
|
| 353 | + hDistanceLast = hDistance; |
| 354 | + hDistance = endCoords.pageX - startCoords.pageX; |
| 355 | + hDistancePercent = hDistance*100/winWidth; |
| 356 | + |
| 357 | + if( !hSwipe && !vSwipe && Math.abs( hDistance ) >= hSwipMinDistance) { |
| 358 | + $('#swipebox-slider').css({ |
| 359 | + '-webkit-transition' : '', |
| 360 | + '-moz-transition' : '', |
| 361 | + '-o-transition' : '', |
| 362 | + '-khtml-transition' : '', |
| 363 | + '-ms-transition' : '', |
| 364 | + 'transition' : '' |
| 365 | + }); |
| 366 | + hSwipe = true; |
| 367 | + } |
| 368 | + |
| 369 | + if( hSwipe ) { |
| 370 | + $('#swipebox-slider').css({ |
| 371 | + '-webkit-transform' : 'translateX(' + (currentX + hDistancePercent) +'%)', |
| 372 | + '-moz-transform' : 'translateX(' + (currentX + hDistancePercent) + '%)', |
| 373 | + '-o-transform' : 'translateX(' + (currentX + hDistancePercent) + '%)', |
| 374 | + '-khtml-transform' : 'translateX(' + (currentX + hDistancePercent) + '%)', |
| 375 | + '-ms-transform' : 'translateX(' + (currentX + hDistancePercent) + '%)', |
| 376 | + 'transform' : 'translateX(' + (currentX + hDistancePercent) + '%)' |
| 377 | + }); |
| 378 | + } |
| 379 | + |
| 380 | + |
333 | 381 | } ); |
334 | 382 |
|
335 | 383 | return false; |
|
338 | 386 | event.preventDefault(); |
339 | 387 | event.stopPropagation(); |
340 | 388 |
|
341 | | - if ( plugin.settings.closeBySwipe ) { |
342 | | - if ( slider.css( 'opacity' ) <= 0.5) { |
| 389 | + $('#swipebox-slider').css({ |
| 390 | + '-webkit-transition' : '-webkit-transform 0.4s ease', |
| 391 | + '-moz-transition' : '-moz-transform 0.4s ease', |
| 392 | + '-o-transition' : '-o-transform 0.4s ease', |
| 393 | + '-khtml-transition' : '-khtml-transform 0.4s ease', |
| 394 | + '-ms-transition' : '-ms-transform 0.4s ease', |
| 395 | + 'transition' : 'transform 0.4s ease' |
| 396 | + }); |
| 397 | + |
| 398 | + vDistance = endCoords.pageY - startCoords.pageY; |
| 399 | + hDistance = endCoords.pageX - startCoords.pageX; |
| 400 | + hDistancePercent = hDistance*100/winWidth; |
| 401 | + |
| 402 | + |
| 403 | + if ( vSwipe ) { |
| 404 | + vSwipe = false; |
| 405 | + if ( Math.abs( vDistance ) >= 2*vSwipMinDistance && Math.abs(vDistance) > Math.abs(vDistanceLast)) { |
343 | 406 | var vOffset = vDistance > 0 ? slider.height() : - slider.height(); |
344 | 407 | slider.animate( { top: vOffset + 'px', 'opacity': 0 }, |
345 | 408 | 300, |
|
350 | 413 | slider.animate( { top: 0, 'opacity': 1 }, 300 ); |
351 | 414 | } |
352 | 415 |
|
353 | | - if ( vSwipe ) { |
354 | | - vSwipe = false; |
355 | | - return; |
| 416 | + } else if ( hSwipe ) { |
| 417 | + hSwipe = false; |
| 418 | + if( hDistance >= hSwipMinDistance && hDistance >= hDistanceLast) { |
| 419 | + // swipeLeft |
| 420 | + $this.getPrev(); |
| 421 | + } else if ( hDistance <= -hSwipMinDistance && hDistance <= hDistanceLast) { |
| 422 | + // swipeRight |
| 423 | + $this.getNext(); |
356 | 424 | } |
357 | | - } |
358 | | - |
359 | | - distance = endCoords.pageX - startCoords.pageX; |
360 | | - |
361 | | - if ( distance >= swipMinDistance ) { |
362 | | - |
363 | | - // swipeLeft |
364 | | - $this.getPrev(); |
365 | | - |
366 | | - } else if ( distance <= - swipMinDistance ) { |
367 | | - |
368 | | - // swipeRight |
369 | | - $this.getNext(); |
370 | | - |
371 | 425 | } else { |
372 | 426 | // tap |
373 | 427 | if ( ! bars.hasClass( 'visible-bars' ) ) { |
|
379 | 433 | } |
380 | 434 | } |
381 | 435 |
|
| 436 | + $('#swipebox-slider').css({ |
| 437 | + '-webkit-transform' : 'translateX(' + currentX + '%)', |
| 438 | + '-moz-transform' : 'translateX(' + currentX + '%)', |
| 439 | + '-o-transform' : 'translateX(' + currentX + '%)', |
| 440 | + '-khtml-transform' : 'translateX(' + currentX + '%)', |
| 441 | + '-ms-transform' : 'translateX(' + currentX + '%)', |
| 442 | + 'transform' : 'translateX(' + currentX + '%)' |
| 443 | + }); |
| 444 | + |
382 | 445 | $( '.touching' ).off( 'touchmove' ).removeClass( 'touching' ); |
383 | 446 |
|
384 | 447 | } ); |
|
537 | 600 | isFirst = isFirst || false; |
538 | 601 |
|
539 | 602 | var slider = $( '#swipebox-slider' ); |
| 603 | + |
| 604 | + currentX = -index*100; |
540 | 605 |
|
541 | 606 | if ( this.doCssTrans() ) { |
542 | | - slider.css( { left : ( -index*100 )+'%' } ); |
| 607 | + slider.css({ |
| 608 | + '-webkit-transform' : 'translateX(' + (-index*100)+'%)', |
| 609 | + '-moz-transform' : 'translateX(' + (-index*100)+'%)', |
| 610 | + '-o-transform' : 'translateX(' + (-index*100)+'%)', |
| 611 | + '-khtml-transform' : 'translateX(' + (-index*100)+'%)', |
| 612 | + '-ms-transform' : 'translateX(' + (-index*100)+'%)', |
| 613 | + 'transform' : 'translateX(' + (-index*100)+'%)', |
| 614 | + }); |
543 | 615 | } else { |
544 | 616 | slider.animate( { left : ( -index*100 )+'%' } ); |
545 | 617 | } |
|
0 commit comments