代码之家  ›  专栏  ›  技术社区  ›  dclowd9901

独立jQuery“touch”方法?

  •  20
  • dclowd9901  · 技术社区  · 14 年前

    外面有什么东西吗?我不是在寻找像jQtouch那样完整的东西,不过我正在考虑对它进行反向工程。

    你有什么建议吗?一段代码已经可用?

    附录:事后我意识到解决方案并不是严格意义上的jQuery,因为我非常确定没有任何内置方法来处理这个问题。我希望标准Javascript能够找到答案。

    3 回复  |  直到 14 年前
        1
  •  32
  •   Ali Habibzadeh    14 年前
    (function($) {
    $.fn.swipe = function(options) {
        // Default thresholds & swipe functions
        var defaults = {
            threshold: {
                x: 30,
                y: 10
            },
            swipeLeft: function() { alert('swiped left') },
            swipeRight: function() { alert('swiped right') },
            preventDefaultEvents: true
        };
    
        var options = $.extend(defaults, options);
    
        if (!this) return false;
    
        return this.each(function() {
    
            var me = $(this)
    
            // Private variables for each element
            var originalCoord = { x: 0, y: 0 }
            var finalCoord = { x: 0, y: 0 }
    
            // Screen touched, store the original coordinate
            function touchStart(event) {
                console.log('Starting swipe gesture...')
                originalCoord.x = event.targetTouches[0].pageX
                originalCoord.y = event.targetTouches[0].pageY
            }
    
            // Store coordinates as finger is swiping
            function touchMove(event) {
                if (defaults.preventDefaultEvents)
                    event.preventDefault();
                finalCoord.x = event.targetTouches[0].pageX // Updated X,Y coordinates
                finalCoord.y = event.targetTouches[0].pageY
            }
    
            // Done Swiping
            // Swipe should only be on X axis, ignore if swipe on Y axis
            // Calculate if the swipe was left or right
            function touchEnd(event) {
                console.log('Ending swipe gesture...')
                var changeY = originalCoord.y - finalCoord.y
                if(changeY < defaults.threshold.y && changeY > (defaults.threshold.y*-1)) {
                    changeX = originalCoord.x - finalCoord.x
    
                    if(changeX > defaults.threshold.x) {
                        defaults.swipeLeft()
                    }
                    if(changeX < (defaults.threshold.x*-1)) {
                        defaults.swipeRight()
                    }
                }
            }
    
            // Swipe was canceled
            function touchCancel(event) { 
                console.log('Canceling swipe gesture...')
            }
    
            // Add gestures to all swipable areas
            this.addEventListener("touchstart", touchStart, false);
            this.addEventListener("touchmove", touchMove, false);
            this.addEventListener("touchend", touchEnd, false);
            this.addEventListener("touchcancel", touchCancel, false);
    
        });
    };
    })(jQuery);
    
    
    $('.swipe').swipe({
     swipeLeft: function() { $('#someDiv').fadeIn() },
     swipeRight: function() { $('#someDiv').fadeOut() },
    })
    

    这就是检测iphone的方法

    if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
         if (document.cookie.indexOf("iphone_redirect=false") == -1) window.location = "path to iphone page";
    }
    
        2
  •  5
  •   thugsb    13 年前
        3
  •  5
  •   eikes    12 年前

    最小和最具jQuery风格的解决方案如下: https://github.com/eikes/jquery.swipe-events.js