Javascript touchEvents在iPad上打破垂直滚动

Lor*_*lin 0 javascript css jquery scroll ipad

我非常接近这种效果,但我在路上碰到了一个小小的凹凸.

我有一个带有主div(#message-viewer)的消息系统,它包含一个消息线程.我想要的是,当用户在iPad上查看此内容并向右滑动(此div内的任何位置)时,#message-viewer从屏幕滑出,#div2从屏幕左侧进入.

  • 好消息:iPad上的效果非常流畅,反应灵敏.来自Padalicious的Javascript就像一个魅力.

  • 问题:

    • 当效果上,我的其他的jQuery功能不工作(例如,我的按钮,打开一个新的div).
    • 垂直滚动不起作用!=(
  • 我试过了:

    • 在#swipeBox上的CSS中,我尝试了所有[overflow:]选项来启用滚动.没有bueno.
    • 我尝试将[ontouchstart =""]附加到单独的Div,而不是创建一个新的.没有bueno.

我希望这是有道理的......我附上了我的代码.我认为Padalicious代码可能会干扰Y滚动...

谢谢您的帮助!

HTML

<!DOCTYPE html>

<link rel="stylesheet" href="global/styles/base.css" type="text/css" />

  <script src="global/js/jquery.tools.min.js"></script>
  <script src="global/js/jquery.min.js"></script>
  <script src="global/js/jquery-ui.min.js"></script>
  <script src="global/js/jquery-1.5.js"></script>
  <script src="global/js/ipad.js"></script>

<meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="viewport" content="minimum-scale=1.0, maximum-scale=1.0,
  width=device-width, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

</head>

<body>

<div id="swipeBox" ontouchstart="touchStart(event,'message-viewer');" ontouchend="touchEnd(event);" ontouchmove="touchMove(event);" ontouchcancel="touchCancel(event);">
  <div id="content-container">
    <div id="message-viewer">
       // CONTENT HERE
    </div>

    <div class="Div2">
       // CONTENT HERE
    </div>
  </div>
</div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS

#swipeBox {

width: 100%;
height: auto;

}
Run Code Online (Sandbox Code Playgroud)

JAVASCRIPT

var triggerElementID = null; // this variable is used to identity the triggering element
        var fingerCount = 0;
        var startX = 0;
        var startY = 0;
        var curX = 0;
        var curY = 0;
        var deltaX = 0;
        var deltaY = 0;
        var horzDiff = 0;
        var vertDiff = 0;
        var minLength = 72; // the shortest distance the user may swipe
        var swipeLength = 0;
        var swipeAngle = null;
        var swipeDirection = null;

        // The 4 Touch Event Handlers

        // NOTE: the touchStart handler should also receive the ID of the triggering element
        // make sure its ID is passed in the event call placed in the element declaration, like:
        // <div id="picture-frame" ontouchstart="touchStart(event,'picture-frame');"  ontouchend="touchEnd(event);" ontouchmove="touchMove(event);" ontouchcancel="touchCancel(event);">

        function touchStart(event,passedName) {
            // disable the standard ability to select the touched object
            event.preventDefault();
            // get the total number of fingers touching the screen
            fingerCount = event.touches.length;
            // since we're looking for a swipe (single finger) and not a gesture (multiple fingers),
            // check that only one finger was used
            if ( fingerCount == 2 ) {
                // get the coordinates of the touch
                startX = event.touches[0].pageX;
                startY = event.touches[0].pageY;
                // store the triggering element ID
                triggerElementID = passedName;
            } else {
                // more than one finger touched so cancel
                touchCancel(event);
            }
        }

        function touchMove(event) {
            event.preventDefault();
            if ( event.touches.length == 2 ) {
                curX = event.touches[0].pageX;
                curY = event.touches[0].pageY;
            } else {
                touchCancel(event);
            }
        }

        function touchEnd(event) {
            event.preventDefault();
            // check to see if more than one finger was used and that there is an ending coordinate
            if ( fingerCount == 2 && curX != 0 ) {
                // use the Distance Formula to determine the length of the swipe
                swipeLength = Math.round(Math.sqrt(Math.pow(curX - startX,2) + Math.pow(curY - startY,2)));
                // if the user swiped more than the minimum length, perform the appropriate action
                if ( swipeLength >= minLength ) {
                    caluculateAngle();
                    determineSwipeDirection();
                    processingRoutine();
                    touchCancel(event); // reset the variables
                } else {
                    touchCancel(event);
                }   
            } else {
                touchCancel(event);
            }
        }

        function touchCancel(event) {
            // reset the variables back to default values
            fingerCount = 0;
            startX = 0;
            startY = 0;
            curX = 0;
            curY = 0;
            deltaX = 0;
            deltaY = 0;
            horzDiff = 0;
            vertDiff = 0;
            swipeLength = 0;
            swipeAngle = null;
            swipeDirection = null;
            triggerElementID = null;
        }

        function caluculateAngle() {
            var X = startX-curX;
            var Y = curY-startY;
            var Z = Math.round(Math.sqrt(Math.pow(X,2)+Math.pow(Y,2))); //the distance - rounded - in pixels
            var r = Math.atan2(Y,X); //angle in radians (Cartesian system)
            swipeAngle = Math.round(r*180/Math.PI); //angle in degrees
            if ( swipeAngle < 0 ) { swipeAngle =  360 - Math.abs(swipeAngle); }
        }

        function determineSwipeDirection() {
            if ( (swipeAngle <= 45) && (swipeAngle >= 0) ) {
                swipeDirection = 'left';
            } else if ( (swipeAngle <= 360) && (swipeAngle >= 315) ) {
                swipeDirection = 'left';
            } else if ( (swipeAngle >= 135) && (swipeAngle <= 225) ) {
                swipeDirection = 'right';
            }
        }

        function processingRoutine() {
            var swipedElement = document.getElementById(triggerElementID);
            if ( swipeDirection == 'left' ) {
                // REPLACE WITH YOUR ROUTINES
                $("#message-viewer").removeClass("slideright");
                $('.Div2').removeClass("slideright");
            } else if ( swipeDirection == 'right' ) {
                // REPLACE WITH YOUR ROUTINES
                $("#message-viewer").addClass("slideright");
                $('.Div2').addClass("slideright");
            }
        }
Run Code Online (Sandbox Code Playgroud)

Ica*_*By0 5

event.preventDefault();块滚动