zepto的swipe事件或原生touch事件,如何获取移动的距离~

就是我按下去,然后向下移动,怎么获取我松开手指时这一段的距离?

阅读 9.3k
2 个回答

举个例子:

HTML:

html<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style media="screen">
        body {
            margin: 0;
        }
        .test {
            background-color: blue;
            width: 100vw;
            height: 100vh;
        }
    </style>
</head>
<body>
    <div class="test"></div>
</body>
</html>

JavaScript

js    (function () {
        var el = document.querySelector('.test');
        var startPosition, endPosition, deltaX, deltaY, moveLength;

        el.addEventListener('touchstart', function (e) {
            var touch = e.touches[0];
            startPosition = {
                x: touch.pageX,
                y: touch.pageY
            }
        });

        el.addEventListener('touchmove', function (e) {
            var touch = e.touches[0];
            endPosition = {
                x: touch.pageX,
                y: touch.pageY
            }

            deltaX = endPosition.x - startPosition.x;
            deltaY = endPosition.y - startPosition.y;
            moveLength = Math.sqrt(Math.pow(Math.abs(deltaX), 2) + Math.pow(Math.abs(deltaY), 2));
            console.log(moveLength);
        });
    })();

console.log出来的moveLength就是你要得到的距离。

可以参考Zepto的touch源码:https://github.com/madrobby/zepto/blob/master/src%2Ftouch.js

正好也遇到这个问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进