Standalone jQuery “touch” method?

前端 未结 3 1509
盖世英雄少女心
盖世英雄少女心 2020-12-22 20:09

So, I\'m looking to implement the ability for a plugin I wrote to read a touch \"swipe\" from a touch-capable internet device, like an iPhone, iPad or android.

Is th

相关标签:
3条回答
  • 2020-12-22 20:47
    (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() },
    })
    

    and this is how you detect 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";
    }
    
    0 讨论(0)
  • 2020-12-22 20:52

    The smallest and most jQuery-esque solution is here: https://github.com/eikes/jquery.swipe-events.js

    0 讨论(0)
  • 2020-12-22 21:08

    There's also jQuery.touchwipe at http://www.netcu.de/jquery-touchwipe-iphone-ipad-library

    0 讨论(0)
提交回复
热议问题