Вход Регистрация
Файл: tyde/www/web/js/core/touch.js
Строк: 241
<?php
/*! UIkit 2.24.3 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
//  Based on Zeptos touch.js
//  https://raw.github.com/madrobby/zepto/master/src/touch.js
//  Zepto.js may be freely distributed under the MIT license.

;(function($){

  if ($.fn.
swipeLeft) {
    return;
  }


  var 
touch = {}, touchTimeouttapTimeoutswipeTimeoutlongTapTimeoutlongTapDelay 750gesture;

  function 
swipeDirection(x1x2y1y2) {
    return 
Math.abs(x1 x2) >= Math.abs(y1 y2) ? (x1 x2 'Left' 'Right') : (y1 y2 'Up' 'Down');
  }

  function 
longTap() {
    
longTapTimeout null;
    if (
touch.last) {
      if ( 
touch.el !== undefined touch.el.trigger('longTap');
      
touch = {};
    }
  }

  function 
cancelLongTap() {
    if (
longTapTimeoutclearTimeout(longTapTimeout);
    
longTapTimeout null;
  }

  function 
cancelAll() {
    if (
touchTimeout)   clearTimeout(touchTimeout);
    if (
tapTimeout)     clearTimeout(tapTimeout);
    if (
swipeTimeout)   clearTimeout(swipeTimeout);
    if (
longTapTimeoutclearTimeout(longTapTimeout);
    
touchTimeout tapTimeout swipeTimeout longTapTimeout null;
    
touch = {};
  }

  function 
isPrimaryTouch(event){
    return 
event.pointerType == event.MSPOINTER_TYPE_TOUCH && event.isPrimary;
  }

  $(function(){
    var 
nowdeltadeltaX 0deltaY 0firstTouch;

    if (
'MSGesture' in window) {
      
gesture = new MSGesture();
      
gesture.target document.body;
    }

    $(
document)
      .
on('MSGestureEnd gestureend', function(e){

        var 
swipeDirectionFromVelocity e.originalEvent.velocityX 'Right' e.originalEvent.velocityX < -'Left' e.originalEvent.velocityY 'Down' e.originalEvent.velocityY < -'Up' null;

        if (
swipeDirectionFromVelocity && touch.el !== undefined) {
          
touch.el.trigger('swipe');
          
touch.el.trigger('swipe'swipeDirectionFromVelocity);
        }
      })
      
// MSPointerDown: for IE10
      // pointerdown: for IE11
      
.on('touchstart MSPointerDown pointerdown', function(e){

        if(
e.type == 'MSPointerDown' && !isPrimaryTouch(e.originalEvent)) return;

        
firstTouch = (e.type == 'MSPointerDown' || e.type == 'pointerdown') ? e.originalEvent.touches[0];

        
now      Date.now();
        
delta    now - (touch.last || now);
        
touch.el = $('tagName' in firstTouch.target firstTouch.target firstTouch.target.parentNode);

        if(
touchTimeoutclearTimeout(touchTimeout);

        
touch.x1 firstTouch.pageX;
        
touch.y1 firstTouch.pageY;

        if (
delta && delta <= 250touch.isDoubleTap true;

        
touch.last now;
        
longTapTimeout setTimeout(longTaplongTapDelay);

        
// adds the current touch contact for IE gesture recognition
        
if (gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) {
          
gesture.addPointer(e.originalEvent.pointerId);
        }

      })
      
// MSPointerMove: for IE10
      // pointermove: for IE11
      
.on('touchmove MSPointerMove pointermove', function(e){

        if (
e.type == 'MSPointerMove' && !isPrimaryTouch(e.originalEvent)) return;

        
firstTouch = (e.type == 'MSPointerMove' || e.type == 'pointermove') ? e.originalEvent.touches[0];

        
cancelLongTap();
        
touch.x2 firstTouch.pageX;
        
touch.y2 firstTouch.pageY;

        
deltaX += Math.abs(touch.x1 touch.x2);
        
deltaY += Math.abs(touch.y1 touch.y2);
      })
      
// MSPointerUp: for IE10
      // pointerup: for IE11
      
.on('touchend MSPointerUp pointerup', function(e){

        if (
e.type == 'MSPointerUp' && !isPrimaryTouch(e.originalEvent)) return;

        
cancelLongTap();

        
// swipe
        
if ((touch.x2 && Math.abs(touch.x1 touch.x2) > 30) || (touch.y2 && Math.abs(touch.y1 touch.y2) > 30)){

          
swipeTimeout setTimeout(function() {
            if ( 
touch.el !== undefined ) {
              
touch.el.trigger('swipe');
              
touch.el.trigger('swipe' + (swipeDirection(touch.x1touch.x2touch.y1touch.y2)));
            }
            
touch = {};
          }, 
0);

        
// normal tap
        
} else if ('last' in touch) {

          
// don't fire tap when delta position changed by more than 30 pixels,
          // for instance when moving to a point and back to origin
          
if (isNaN(deltaX) || (deltaX 30 && deltaY 30)) {
            
// delay by one tick so we can cancel the 'tap' event if 'scroll' fires
            // ('tap' fires before 'scroll')
            
tapTimeout setTimeout(function() {

              
// trigger universal 'tap' with the option to cancelTouch()
              // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
              
var event = $.Event('tap');
              
event.cancelTouch cancelAll;
              if ( 
touch.el !== undefined touch.el.trigger(event);

              
// trigger double tap immediately
              
if (touch.isDoubleTap) {
                if ( 
touch.el !== undefined touch.el.trigger('doubleTap');
                
touch = {};
              }

              
// trigger single tap after 250ms of inactivity
              
else {
                
touchTimeout setTimeout(function(){
                  
touchTimeout null;
                  if ( 
touch.el !== undefined touch.el.trigger('singleTap');
                  
touch = {};
                }, 
250);
              }
            }, 
0);
          } else {
            
touch = {};
          }
          
deltaX deltaY 0;
        }
      })
      
// when the browser window loses focus,
      // for example when a modal dialog is shown,
      // cancel all ongoing events
      
.on('touchcancel MSPointerCancel'cancelAll);

    
// scrolling the window indicates intention of the user
    // to scroll, not tap or swipe, so cancel all ongoing events
    
$(window).on('scroll'cancelAll);
  });

  [
'swipe''swipeLeft''swipeRight''swipeUp''swipeDown''doubleTap''tap''singleTap''longTap'].forEach(function(eventName){
    $.fn[
eventName] = function(callback){ return $(this).on(eventNamecallback); };
  });
})(
jQuery);
?>
Онлайн: 0
Реклама