aria-dropeffect 已被 wai-aria 1.1 废弃,因无法映射操作系统拖拽语义、与原生 drag 事件脱节,且主流屏幕阅读器已忽略;应改用 role="application" 结合 drag 事件、aria-label、aria-live 等实现无障碍拖拽。

aria-dropeffect 已被 WAI-ARIA 1.1 正式弃用,现代浏览器不再支持,也不应再使用。
为什么 aria-dropeffect 不该用了
W3C 在 ARIA 1.1(2017 年发布)中将 aria-dropeffect 标记为“已废弃(deprecated)”,原因是它无法可靠映射到主流操作系统和辅助技术的拖拽语义,且与原生 dragstart/dragover/drop 事件脱节。主流屏幕阅读器(NVDA、JAWS、VoiceOver)早已忽略该属性,设置后既不触发提示,也不改变行为。
替代方案:用 role="application" + 原生 drag events
若需让可拖拽区域对辅助技术可感知,核心是结合语义角色与明确的交互反馈,而非依赖已失效的属性:
- 对整个拖拽上下文容器(如列表、画布)添加
role="application",告知辅助技术“此处启用自定义交互” - 在目标元素上用
aria-label或aria-describedby明确说明“可接收拖入的卡片”“松开鼠标即可放置”等操作提示 - 监听
dragover时调用event.preventDefault(),并动态添加aria-dropeffect="none"(仅作兼容占位,无实际作用)或更推荐——切换aria-busy="true"和视觉高亮 - 在
drop后立即移除临时状态,并用aria-live="polite"区域播报结果(如“已将‘任务A’放入‘待办’列表”)
常见错误:混用旧属性和新标准
开发者常误以为加了 aria-dropeffect="move" 就算支持无障碍拖拽,实际会引发以下问题:
- Chrome / Firefox 控制台静默忽略该属性,但部分旧版 JAWS 会错误播报“dropeffect move”,造成误导
- 与
draggable="true"搭配时,屏幕阅读器可能重复播报“可拖拽”和已废弃的 dropeffect,干扰用户 - 自动化无障碍检测工具(axe、WAVE)会直接报错
aria-dropeffect is deprecated - React/Vue 等框架中通过 props 绑定
aria-dropeffect,上线后属性存在但零效果,掩盖真实无障碍缺陷
真正起作用的是事件响应逻辑和清晰的实时反馈,不是那个写在 HTML 里却没人读的字符串。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











