跳到主要内容

Touch

React DnD 新手? 在进入文档之前请阅读概述

触控后端

HTML5 后端不支持触控事件。所以它不适用于平板电脑和移动设备。你可以将 react-dnd-touch-backend 用于触控设备。

安装

运行以下命令安装触控后端。

npm install react-dnd-touch-backend

使用

import { TouchBackend } from 'react-dnd-touch-backend'
import { DndProvider } from 'react-dnd'

class YourApp {
<DndProvider backend={TouchBackend} options={opts}>
{/* Your application */}
</DndProvider>
}

选项

  • enableTouchEvents(default: true)

    是否启用基于触控的事件处理。

  • enableMouseEvents(default: false)

    是否启用基于点击的事件处理。

    注意:这是错误的,因为与 mousedown/mouseup/click 相比,touchstart/touchend 事件传播有差异。

  • enableKeyboardEvents (default: false)

    是否启用键盘事件处理。

  • delay (default: 0)

    延迟处理所有事件的毫秒数

  • delayTouchStart (default: 0)

    延迟处理触控事件的毫秒数

  • delayMouseStart (default: 0)

    延迟处理鼠标事件的毫秒数

  • touchSlop (default: 0)

    指定在发出拖动信号之前移动的像素距离。

  • ignoreContextMenu (default: false)

    如果为 true,则在取消拖动时阻止 contextmenu 事件。

  • scrollAngleRanges: (default: undefined)

    指定应忽略拖动事件的角度范围(以度为单位)。当你希望允许用户沿特定方向滚动而不是拖动时,这很有用。度数顺时针移动,0/360 指向左侧。

    // allow vertical scrolling
    const options = {
    scrollAngleRanges: [
    { start: 30, end: 150 },
    { start: 210, end: 330 }
    ]
    }
    // allow horizontal scrolling
    const options = {
    scrollAngleRanges: [{ start: 300 }, { end: 60 }, { start: 120, end: 240 }]
    }
  • enableHoverOutsideTarget: (default: undefined)

    当指针离开放置目标区域时继续拖动当前拖动的元素

  • getDropTargetElementsAtPoint (default: undefined) - 使用 document.elementsFromPoint 或 polyfill

    指定自定义函数以在给定点查找放置目标的元素。对于在 document.elementsFromPoint不可用的环境(iOS Safari)中提高性能很有用。

    const hasNative =
    document && (document.elementsFromPoint || document.msElementsFromPoint)

    function getDropTargetElementsAtPoint(x, y, dropTargets) {
    return dropTargets.filter((t) => {
    const rect = t.getBoundingClientRect()
    return (
    x >= rect.left && x <= rect.right && y <= rect.bottom && y >= rect.top
    )
    })
    }

    // 仅当元素elementsFromPoint不受支持时才使用自定义函数
    const backendOptions = {
    getDropTargetElementsAtPoint: !hasNative && getDropTargetElementsAtPoint
    }

    ;<DndProvider backend={TouchBackend} options={backendOptions}>
    /* 你的React组件/应用 */
    </DndProvider>