移动应用中的滑动——手势类型与实现

作者: IT Sectr 发布日期: 2026-08-03 阅读时间: 7 分钟

滑动是手指在屏幕上滑动的一种手势,已成为移动界面中主要的交互方式之一。从简单的翻看照片到删除邮件——滑动已替代了许多按钮,使操控更加自然。根据 Apple Human Interface Guidelines (2024)滑动手势是添击之后第二常用的手势,占移动应用中所有交互的22%。

主要内容

  • 滑动 — 手指在屏幕上按某一方向移动的滑动手势
  • 方向 — 水平(左/右)和垂直(上/下)滑动
  • 主要场景 — 删除、导航、切换标签页、下拉刷新
  • 手势持续时间 — 从100到500毫秒,更长时间将被识别为拖动
  • 实现 — iOS上的UIGestureRecognizer、Android上的GestureDetector、Web上的触摸事件

移动界面中的滑动是什么

滑动(swipe)是用户将手指在屏幕上按某一方向移动,以启动某个操作的手势。与点击(短暂触摸)不同,滑动在整个手势过程中包含移动和与屏幕的接触。

滑动的历史始于2007年的第一款iPhone——“slide to unlock”解锁手势成为了移动界面的标志。如今,滑动被用于数千个应用中的导航、内容管理和信息组织。

根据UX Planet (2025),采用手势控制(包括滑动)的应用程序显示用户参与度高出18%。与按钮按压相比,滑动被视为更自然的操作,因为它模拟了物体的物理移动。

滑动识别的参数

主要参数,用于确定手势是否为滑动:最小距离(通常30–50像素)、离直线的最大偏移(不超过15–20度)以及最大接触时间(倍蔀力)。如果手指在屏幕上停留时间过长,该手势将被分类为拖动(drag)或长按(long press)。

按方向分类的滑动类型

按移动方向,滑动可分为四种主要类型:向左、向右、向上和向下。每种类型都有其自己的用途和使用场景。

滑动类型操作使用示例
向左删除、归档、隐藏在Mail中删除邮件,在Tinder中隐藏
向右确认、查看Tinder中的点赞,标记为“已读”
向上刷新、关闭下拉刷新,滑动关闭面板
向下返回导航、打开在iOS中向下滑动返回,通知中心

水平滑动(向左/向右)最常用于管理单个元素——删除、归档、翻页。垂直滑动(向上/向下)——用于屏幕之间的导航和内容刷新。根据Material Design Guidelines (2024),水平滑动对右扫子更为便捷:用大拇指向左移动在右手上更自然。

多指滑动

双指和三指滑动用于高级操作。双指——在iPad上切换桌面,撤销操作(three-finger swipe)。三指——在某些设备上截图。然而,多指手势不够直觉,需要用户学习。

iOS上的滑动实现

在iOS上,手势处理基于UIGestureRecognizer——一个抽象类,它分析触摸事件序列并判断它是否与某个特定手势匹配。

swift
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let swipeLeft = UISwipeGestureRecognizer(
            target: self,
            action: #selector(handleSwipe)
        )
        swipeLeft.direction = .left
        view.addGestureRecognizer(swipeLeft)
    }

    @objc func handleSwipe(sender: UISwipeGestureRecognizer) {
        print("向左滑动")
    }
}

UISwipeGestureRecognizer支持方向(direction)和手指数(numberOfTouchesRequired)的配置。默认情况下需要一根手指和向右方向。要确定其他方向,需要显式设置direction: .left, .up, .down。

更高级别的API——支持滑动操作的UICollectionViewLayout。从iOS 11开始,表格和集合通过UISwipeActionsConfiguration支持内置的滑动操作,可以无需手动处理手势即可添加删除或归档按钮。

Android上的滑动实现

在Android上,滑动处理通过GestureDetector实现——该类分析MotionEvents并调用相应的回调方法。

kotlin
class SwipeActivity : AppCompatActivity() {
    private val swipeThreshold = 100

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
            override fun onFling(
                e1: MotionEvent, e2: MotionEvent,
                velocityX: Float, velocityY: Float
            ): Boolean {
                val dx = e2.x - e1.x
                if (dx > swipeThreshold) {
                    println("向右滑动")
                }
                return true
            }
        })
    }
}

GestureDetector中的onFling方法在用户快速滑动手指时被调用。它接收起始和结束坐标(e1, e2)以及移动速度(velocityX, velocityY)。要确定方向,需要比较X或Y轴上的坐标差异。

AndroidX库提供了更便捷的API:用于下拉刷新的ViewCompat.setSwipeRefreshLayout,以及在列表中实现滑动操作的RecyclerView与ItemTouchHelper。ItemTouchHelper可以添加带有视觉反馈的滑动功能——图标、背景颜色和动画。

Web应用中的滑动

在Web开发中,滑动处理使用Touch Events API事件(touchstart, touchmove, touchend)以及Hammer.js或Swiper.js等辅助库。

js
let startX = 0;
let startY = 0;
const threshold = 50;

element.addEventListener("touchstart", (e) => {
    startX = e.touches[0].clientX;
    startY = e.touches[0].clientY;
});

element.addEventListener("touchend", (e) => {
    const dx = e.changedTouches[0].clientX - startX;
    const dy = e.changedTouches[0].clientY - startY;
    if (Math.abs(dx) > threshold) {
        console.log(dx > 0 ? "向右滑动" : "向左滑动");
    }
});

Touch Events API——浏览器中处理手势的原生方式。touchstart事件记录起始坐标,touchmove跟踪移动,touchend确定结果。阈值(threshold)过滤掉随机触摸。

根据Can I Use (2026),98%的浏览器支持Touch Events API。对于复杂的手势场景(多次滑动、方向识别),建议使用Hammer.js库,它抽象了低层处理并提供了清晰的API。

含滑动的UX模式

成功的UX模式随着移动界面多年的演变而形成。使用它们可以确保用户无需额外的学习即可理解手势的工作原理。

“Swipe to Delete”模式——最为常见。在列表项上向左滑动可打开删除按钮。在iOS(SwipeActionsConfiguration)和Android(ItemTouchHelper)上已标准化。用户期望向左滑动会删除或归档项目。

“Swipe to Go Back”模式——从屏幕左缘滑动以返回上一屏幕。在iPhone X之后成为iOS的标准。在Android上,类似的导航通过系统手势工作。在您的应用中不要与这种系统手势产生冲突。

“Pull to Refresh”模式——向下滑动以刷新内容。由Loren Brichter为Tweetie(2008)发明,现在已在数百万个应用中使用。在两个平台的标准组件中均有实现。

  • 反馈——元素应该跟着手指一起移动,在滑动完成前显示结果
  • 手势冲突——避免在同一元素上同时支持水平滑动和滚动
  • 可发现性——首次滑动操作应配有视觉提示
  • 取消——用户应能通过将手指回到起始位置来取消滑动

常见问题

滑动与拖动(drag)有什么区别?

滑动——手指快速移动并随后抬起。拖动——保持接触的缓慢移动。主要区别在于速度:滑动时速度阈值至关重要,而拖动时仅移动坐标重要。

识别滑动的最小距离是多少?

iOS和Android使用约30–50像素的阈值。对于Web应用,建议使用40–60像素的阈值。较小的值会导致滚动时误触发,较大的值需要过宽的移动。

如何避免滑动与滚动产生冲突?

按方向确定手势优先级:水平滑动锁定垂直滚动,垂直滑动锁定水平滚动。在iOS上,使用UIScrollViewDelegate的gestureRecognizerShouldBegin方法管理优先级。

是否需要教用户滑动?

对于标准滑动(删除、返回)无需教学——用户已经熟悉。对于独特的手势(三指滑动、非标准方向),需要附带视觉演示的引导。

如何让滑动对运动能力受限的用户可访问?

始终用按钮备份滑动操作。对于手抖的用户,将激活阈值增加到70–100像素,超时设为800毫秒。使用VoiceOver/TalkBack来声明可用的滑动操作。

总结

  • 滑动——手指在屏幕上滑动的手势,仅次于点击的第二大流行手势
  • 按方向分类——向左(删除)、向右(确认)、向上(刷新)、向下(返回)
  • iOS上的实现——UISwipeGestureRecognizer,列表用UISwipeActionsConfiguration
  • Android上的实现——GestureDetector.onFling,RecyclerView用ItemTouchHelper
  • Web上的实现——Touch Events API或Hammer.js、Swiper.js库
  • UX模式——swipe to delete、swipe to go back、pull to refresh——经过验证的解决方案

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读