{
  "_description": "本文件由 data/ 生成：请改动来源文件，不要改这里。各字段的证据边界见接入指南。",
  "schemaVersion": "1.0.0",
  "kind": "entry",
  "locale": "zh-CN",
  "id": "haptic-feedback",
  "name": {
    "zh": "触觉反馈",
    "en": "Haptic Feedback"
  },
  "page": "https://designvocabulary.com/zh/entries/haptic-feedback/",
  "self": "https://designvocabulary.com/zh/entries/haptic-feedback.json",
  "alternates": {
    "zh-CN": "https://designvocabulary.com/zh/entries/haptic-feedback.json",
    "en": "https://designvocabulary.com/en/entries/haptic-feedback.json"
  },
  "site": {
    "catalogSchemaVersion": "0.1.0",
    "entries": 158,
    "index": "https://designvocabulary.com/zh/entries/index.json",
    "query": "https://designvocabulary.com/api/query?lang=zh",
    "guide": "https://designvocabulary.com/zh/agents/",
    "llms": "https://designvocabulary.com/llms.txt"
  },
  "provenance": {
    "sourceBacked": [
      "entry.definition"
    ],
    "editorial": [
      "entry.boundary",
      "entry.signature",
      "entry.when",
      "entry.when_not",
      "entry.tradeoff",
      "entry.comparison",
      "entry.rules",
      "entry.relations",
      "entry.implementationNote",
      "entry.behavior"
    ],
    "scope": "定义参考以上来源；数字界面示例、选择建议、条件关系及配方由本样例编辑，尚未经用户研究验证。",
    "editorialStatus": "drafted",
    "specimenData": "fictional",
    "specimenNote": "示例为原创虚构界面；定义附来源，用法与配方为编辑建议。",
    "sources": [
      {
        "id": "mdn-vibration-api",
        "url": "https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API",
        "title": "MDN · Vibration API",
        "checkedAt": "2026-09-16",
        "archive": {
          "status": "available",
          "confirmed": true,
          "url": "https://web.archive.org/web/20260917120933/https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API",
          "capturedAt": "2026-09-17T12:09:33Z",
          "lookupUrl": "https://web.archive.org/web/20260916*/https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API"
        }
      },
      {
        "id": "mdn-navigator-vibrate",
        "url": "https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate",
        "title": "MDN · Navigator: vibrate() method",
        "checkedAt": "2026-09-16",
        "archive": {
          "status": "available",
          "confirmed": true,
          "url": "https://web.archive.org/web/20260916054924/https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate",
          "capturedAt": "2026-09-16T05:49:24Z",
          "lookupUrl": "https://web.archive.org/web/20260916*/https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate"
        }
      },
      {
        "id": "w3c-vibration-api",
        "url": "https://www.w3.org/TR/vibration/",
        "title": "W3C · Vibration API",
        "checkedAt": "2026-09-16",
        "archive": {
          "status": "available",
          "confirmed": true,
          "url": "https://web.archive.org/web/20260916130931/https://www.w3.org/TR/vibration/",
          "capturedAt": "2026-09-16T13:09:31Z",
          "lookupUrl": "https://web.archive.org/web/20260916*/https://www.w3.org/TR/vibration/"
        }
      }
    ],
    "lists": [
      {
        "id": "M-C",
        "edition": "classic",
        "seat": 9,
        "origin": "issue-1-ledger",
        "page": "https://designvocabulary.com/zh/lists/M-C/",
        "json": "https://designvocabulary.com/zh/lists/M-C.json"
      },
      {
        "id": "M-Y",
        "edition": "2026-focus",
        "seat": 9,
        "origin": "issue-1-ledger",
        "page": "https://designvocabulary.com/zh/lists/M-Y/",
        "json": "https://designvocabulary.com/zh/lists/M-Y.json"
      }
    ],
    "ordered": false,
    "listDisclaimer": "席位号是编辑位置，不是评分、排名或人气统计；清单未收满时保持原样，不补足。"
  },
  "entry": {
    "id": "haptic-feedback",
    "type": "micro",
    "name": {
      "zh": "触觉反馈",
      "en": "Haptic Feedback"
    },
    "aliases": [
      "振动反馈",
      "Vibration Feedback",
      "Haptics"
    ],
    "granularity": "state",
    "intents": [
      "inform"
    ],
    "tags": [
      "触觉",
      "振动",
      "辅助通道",
      "设备差异",
      "无障碍局限"
    ],
    "definition": "触觉反馈通过设备振动或力反馈等物理触感，在一次按压、状态变化或事件发生时提供简短的物理确认信号；在 Web 上主要由 Vibration API（navigator.vibrate()）提供，仅在设备存在振动硬件、未处于静音或免打扰模式、且用户已与页面产生交互时才会起作用，规范本身将其定位为面向简单触感反馈的机制，而非通用通知渠道。",
    "boundary": "触觉反馈是叠加在其他反馈之上的一条辅助通道，用来在指尖上确认一次按压、状态变化或事件；它不能替代按下状态反馈的视觉呈现（那是基础且必需的反馈），也不能替代状态消息对结果的文字或图形说明。这是因为很多用户的设备不具备振动硬件、系统层面已关闭触觉、设备处于静音或免打扰模式，或设备根本没有被握持而感觉不到振动；Web 平台对振动能力的支持也有限且不一致，部分浏览器从未实现，部分已经移除实现。触觉反馈必须始终与至少一种视觉或文本反馈并存，不能单独承担传达事件或状态的责任。",
    "signature": [
      "一次简短的、时长与强度可控的振动或力反馈，紧随一次按压、状态变化或事件发生",
      "同一事件已经通过视觉（如按下状态）或文本（如状态消息）等其他通道呈现，触觉只是叠加确认而非唯一线索",
      "强度与时长随事件的重要程度分级，不会让每次常规交互都触发相同的振动"
    ],
    "when": [
      "移动设备上的关键确认（例如支付完成、关键错误）需要在视觉之外再叠加一层物理确认",
      "用户可能没有始终注视屏幕但仍握持设备，振动能在视觉之外传达一次事件的发生",
      "平台已提供触觉能力，且用户未在系统层面关闭触觉或开启减少动态效果设置"
    ],
    "when_not": [
      "不要把触觉反馈作为事件或状态的唯一指示——许多用户的设备或浏览器不支持振动，或系统设置已将其关闭",
      "不要为每一次常规点击、滚动或悬停都触发振动，那会让触觉迅速变得嘈杂并被用户忽略",
      "不要在用户已关闭系统级触觉或启用减少动态效果之后，在应用内为其重新开启振动而未取得用户同意"
    ],
    "tradeoff": "触觉反馈能在视觉之外提供即时的物理确认，尤其适合移动握持场景；但 Web 平台的振动能力覆盖有限且不稳定（部分浏览器从未支持、部分已移除支持），许多用户也会关闭系统触觉或使用不支持振动的设备。因此它只能作为锦上添花的补充通道，不能承担传达信息的主要责任，过度使用还会造成干扰。",
    "comparison": {
      "focus": "通过物理触感确认一次按压、状态变化或事件，而不是展示视觉或文字内容",
      "mechanism": "简短、时长与强度可控的设备振动或力反馈，通常由 Web Vibration API 等平台能力触发",
      "cost": "设备硬件、浏览器实现和用户系统设置都可能导致触觉不可用，因此必须搭配视觉或文本反馈使用；触发过于频繁会造成干扰并可能被系统或用户屏蔽"
    },
    "sources": [
      {
        "id": "mdn-vibration-api",
        "title": "MDN · Vibration API",
        "url": "https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API",
        "claim": "文档说明大多数现代移动设备内置振动硬件，Vibration API 让网页在硬件存在时通过 navigator.vibrate() 触发振动模式，设备不支持时调用不产生任何效果；文档将该特性标注为“Limited availability”，因为它在部分主流浏览器中并不可用。",
        "checkedAt": "2026-09-16",
        "archive": {
          "lookupUrl": "https://web.archive.org/web/20260916*/https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API",
          "status": "available",
          "checkedAt": "2026-09-22T14:39:43.718Z",
          "jobId": "spn2-e563823f04a45bf3e660d9a0324248a4847fec68",
          "url": "https://web.archive.org/web/20260917120933/https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API",
          "timestamp": "20260917120933"
        }
      },
      {
        "id": "mdn-navigator-vibrate",
        "title": "MDN · Navigator: vibrate() method",
        "url": "https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate",
        "claim": "文档说明该方法在设备存在振动硬件时脉冲式触发振动，不支持振动的设备调用无效果；并指出部分设备在静音或免打扰模式下可能不会振动，且该功能需要“sticky user activation”（用户已与页面或界面元素交互过）才能生效。",
        "checkedAt": "2026-09-16",
        "archive": {
          "lookupUrl": "https://web.archive.org/web/20260916*/https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate",
          "status": "available",
          "checkedAt": "2026-09-16T05:49:01.232Z",
          "jobId": "spn2-174ceac77144d8ad901e87c65d15bc459cbf67ef",
          "url": "https://web.archive.org/web/20260916054924/https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate",
          "timestamp": "20260916054924"
        }
      },
      {
        "id": "w3c-vibration-api",
        "title": "W3C · Vibration API",
        "url": "https://www.w3.org/TR/vibration/",
        "claim": "规范将振动定义为一种触觉反馈，并声明该 API 的设计目标仅覆盖简单触感反馈场景，“本 API 不应被用作通用通知机制”；规范文本承认目前仅在基于 Chromium 的浏览器中实现，WebKit 已表态反对该规范，Firefox 已在 129 版本中移除实现，且该规范预计不会以现有形式成为 W3C 推荐标准。",
        "checkedAt": "2026-09-16",
        "archive": {
          "lookupUrl": "https://web.archive.org/web/20260916*/https://www.w3.org/TR/vibration/",
          "status": "available",
          "checkedAt": "2026-09-16T13:08:19.692Z",
          "jobId": "spn2-e5a06b80f5283661d8f551360800fed8cc89d112",
          "url": "https://web.archive.org/web/20260916130931/https://www.w3.org/TR/vibration/",
          "timestamp": "20260916130931"
        }
      }
    ],
    "relations": [
      {
        "target": "pressed-state",
        "kind": "composes_with",
        "condition": "控件被按压且平台提供触觉能力",
        "reason": "按下状态负责视觉上的即时确认，触觉反馈可以叠加在其上提供额外的物理确认，但不能替代视觉呈现。",
        "basis": "editorial"
      },
      {
        "target": "status-message",
        "kind": "related",
        "condition": "事件或操作结果需要向用户交代",
        "reason": "状态消息用文字或图形报告结果，触觉反馈只能在其之外提供一次简短的物理提示，二者回答的问题不同。",
        "basis": "editorial"
      },
      {
        "target": "inclusive-design",
        "kind": "informs",
        "condition": "决定是否以及如何使用触觉反馈",
        "reason": "触觉的可用性因设备、浏览器实现和用户设置而异，包容性设计的视角提醒必须为无法感知触觉的用户保留同等有效的替代反馈。",
        "basis": "editorial"
      }
    ],
    "rules": [
      {
        "when": "触觉反馈被用于确认一次事件或状态",
        "instruction": "必须同时提供至少一种视觉或文本反馈（如按下状态或状态消息），使触觉不可用或被关闭时用户仍能获知结果。",
        "strength": "must",
        "basis": "editorial"
      },
      {
        "when": "设计触觉的强度与触发时机",
        "instruction": "根据事件的重要程度分级振动的强度与时长，避免在常规、低风险的交互上重复触发相同振动。",
        "strength": "recommend",
        "basis": "editorial"
      },
      {
        "when": "用户已在系统层面关闭触觉反馈或启用减少动态效果设置",
        "instruction": "遵循系统设置，不得在应用内为用户重新启用触觉反馈，除非用户在应用内明确同意。",
        "strength": "must",
        "basis": "editorial"
      }
    ],
    "requirements": [],
    "behavior": {
      "states": [
        "idle",
        "light",
        "strong"
      ],
      "a11y": [
        "触觉反馈不得作为唯一反馈，必须叠加视觉或文本反馈",
        "遵循系统的触觉与减少动态效果设置，不在应用内单独重新开启"
      ],
      "motion": "振动本身是触觉而非视觉动效；与之搭配的视觉确认仍按各自的减少动态规则处理，不因触觉的存在而省略"
    },
    "demo": null,
    "version": "0.1.0",
    "editorialStatus": "drafted",
    "demoCapabilities": [],
    "implementationNote": "本词条尚无可操作样本；插图为编辑示意。应用到产品中仍须验证：目标浏览器与设备是否真正支持 Vibration API（例如 iOS Safari 等长期不支持振动）、系统静音或免打扰模式下的实际表现、用户是否已在系统层面关闭触觉或启用减少动态效果，以及触觉反馈是否在任何情况下都伴随可感知的视觉或文本反馈。",
    "image": {
      "src": "/images/haptic-feedback.webp",
      "alt": "虚构的 FIELDNOTES 界面上一根手指正按压一个控件，指尖周围有若干同心涟漪状弧线向外扩散，旁边并列一枚小的视觉确认徽标，整体为暖色调编辑插画。"
    },
    "searchTerms": [
      "haptics",
      "vibration",
      "supplementary channel",
      "device variance",
      "accessibility limits"
    ]
  }
}
