如何实现无障碍的 Web 拖拽效果?

拖拽是 Web 应用中常用的交互方式。然而,针对视力或身体上有障碍的用户来说,通常需要特殊的技术支持才能实现无障碍的拖拽效果。在本文中,我们将介绍如何使用一些简单的技术来实现无障碍拖拽,并且让更多用户都能够使用。

开始实现

首先,我们需要创建一个包含拖拽元素的页面。在这个例子中,我们将使用一个列表,其中每个元素都是可拖拽的。示例代码如下:

--- ----------
  --- --------------------- ------
  --- --------------------- ------
  --- --------------------- ------
-----

基本的拖拽实现

为了实现基本的拖拽功能,我们需要在 JavaScript 中添加拖拽事件处理程序。下面是一个示例:

----- ---- - --------------------------------

---------------------------------- --- -- -
  ------------------------------------ ----------------------
---

在这个示例中,我们将 dragstart 事件处理程序附加到列表元素上。当用户开始拖动一个元素时,浏览器将触发此事件。我们使用 setData 方法将文本数据放入 dataTransfer 对象中。这样,当用户停止拖动元素时,将把该数据传递给任何成功拖动到的目标。

为了使列表元素可拖拽,我们添加了 draggable="true" 属性,这会告诉浏览器该元素可以被拖动。

让拖拽更可访问

为了使我们的拖拽更可访问,我们需要添加一些 ARIA 属性。ARIA 是一组规范,用于描述如何使 Web 内容和 Web 应用程序更为可访问。在我们的示例中,我们可以添加类似于以下内容的代码:

--- --------- -------------- ----------------------------
  --- ------------- ---------------- -------------------------- ------
  --- ------------- ---------------- -------------------------- ------
  --- ------------- ---------------- -------------------------- ------
-----

这些属性有以下用途:

  • role="listbox":告诉屏幕阅读器这是一个列表框。
  • role="option":告诉屏幕阅读器这是选项元素。
  • aria-selected="false":告诉屏幕阅读器尚未选中该元素。

提供拖拽目标

在我们的示例中,我们希望用户能够拖动一个元素到另一个元素上,从而改变它们之间的顺序。为此,我们需要添加一个拖动目标。我们可以在 dragover 事件中高亮拖动目标,以表明用户可以将拖动元素放在该目标上:

--------------------------------- --- -- -
  -------------------

  ----- ------------- - ----------------------------- ------------
  -- --------------- -
    -----------------------------------------
  -

  ----- ------ - -----------------------
  -- -------- -
    -------------------------------
  -
---

在这个示例中,我们使用 preventDefault 方法使浏览器知道我们允许拖动到该目标元素上。我们使用 closest 方法找到最接近的 li 元素,并将其添加到 active 类中。

将元素放置在目标上

当用户停止拖动元素时,我们需要将元素放置在目标上。我们可以在 drop 事件处理程序中完成此操作:

----------------------------- --- -- -
  -------------------

  ----- ------------- - ----------------------------- ------------
  -- --------------- -
    -----------------------------------------
  -

  ----- ------ - -----------------------
  -- -------- -
    -----------------------------
  -
---

在这个示例中,我们使用 before 方法将活动元素插入到目标元素之前。我们同样使用 closest 方法找到最接近的 li 元素,并将其移动到列表中。

让拖拽更明显

为了让拖动行为对所有用户更明显,我们可以使用一些 CSS 样式来为拖动元素添加特殊效果。以下是一个示例:

-- -
  ----------------- --------
  ------- --- ----- -----
  -------- -----
  -------------- -----
-

--------- -
  ----------------- -----
-

在这个示例中,我们为列表元素添加了一些 CSS 样式,以便在用户拖动时提供视觉反馈。我们使用 active 类来为拖动目标添加特殊效果。

结论

无障碍的拖拽是一个实现起来非常简单且非常重要的功能。通过添加一些 ARIA 属性和 CSS 样式,我们可以为所有用户提供更好的拖动体验。在这个例子中,我们演示了如何实现基本的拖拽功能,并为有特殊需求的用户提供了更好的拖拽支持。我们希望这篇文章对你有所帮助,并鼓励你在你的 Web 应用中实现无障碍的拖拽效果。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6715dd92ad1e889fe2193b36