当前位置:  开发笔记 > 编程语言 > 正文

独立的jQuery"触摸"方法?

如何解决《独立的jQuery"触摸"方法?》经验,为你挑选了3个好方法。

因此,我正在寻求实现我编写的插件的能力,以便从具有触控功能的互联网设备(如iPhone,iPad或Android)中读取触摸"刷卡".

那里有什么吗?我不是在寻找像jQtouch一样完整的东西,尽管正在考虑逆向工程我需要的代码.

有关最佳方法的任何建议吗?一段代码已经可用?

附录:事后我意识到解决方案不会严格地说是jQuery,因为我很确定没有任何内置方法来处理这个问题.我希望标准的Javascript能够在答案中找到答案.



1> Ali Habibzad..:
(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";
}


jSwipe和James Lin的解决方案都适用于这一个用例 - "我想检测超过给定长度的触摸和拖动".但是,这并不能完全模拟原生的iOS/Android行为,这种行为要复杂得多.例如,每个解决方案都会取消触摸移动的默认行为 - 如果您希望"滑动"元素在您滑动(即平移)时移动而不是等待滑动结束,该怎么办?或者,如果短暂的快速滑动应该等于更长,更慢的滑动?触摸手势更多地是关于惯性和动量,而不仅仅是运动.仍然缺少一个好的解决方案.

2> thugsb..:

还有jQuery.touchwipe在http://www.netcu.de/jquery-touchwipe-iphone-ipad-library



3> eikes..:

最小和最jQuery-esque解决方案在这里:https://github.com/eikes/jquery.swipe-events.js

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有