Drag
drag的操作和pan操作的规则相同,但是有一个最大的区别是,drag操作的组件是真实发生位移才会触发。
onDrag(event, info): void
当组件被拖动时,绑定的函数会被触发
function onDrag(event, info) {
console.log(info.point.x, info.point.y)
}
<Frame drag onDrag={onDrag} />
绑定函数的参数
event: MouseEvent | TouchEvent | PointerEvent
info: PanInfo
onDragStart(event, info): void
当组件刚被拖动的时候触发绑定的函数
function onDragStart(event, info) {
console.log(info.point.x, info.point.y)
}
<Frame drag onDragStart={onDragStart} />
绑定函数的参数
event: MouseEvent | TouchEvent | PointerEvent
info: PanInfo
onDragEnd(event, info): void
当组件拖动结束时会触发绑定的函数
function onDragEnd(event, info) {
console.log(info.point.x, info.point.y)
}
<Frame drag onDragEnd={onDragEnd} />
绑定函数的参数
event: MouseEvent | TouchEvent | PointerEvent
info: PanInfo
onDirectionLock(axis): void
当拖动的方向被锁定时会触发绑定的函数
function onDirectionLock(axis) {
console.log(axis)
}
<Frame
drag
dragDirectionLock
onDirectionLock={onDirectionLock}
/>
axis: "x" | "y"
drag: boolean | "x" | "y"
通过这个属性能设置该标签元素是否能被拖动,默认是false,如果设置为true,则可往任意方向拖动。设置成"x"或者"y"方向则只能在该方向上拖动。
<Frame drag="x" />
dragConstraints: false | { top?:number; right?:number; left?: number; bottom?:number } | RefObject<Element>
可以传入一个包含top,left,right,bottom属性的数值对象,这样就可以设置元素的被拖拽限制范围,注意,如果要设置向右和向上的拖拽距离限制,要用负数。
另外你也可以使用React中的useRef这个hook,通过使用这个功能,你可以把某个元素的范围设置为拖动限制区域。
// In pixels
<Frame
drag="x"
dragConstraints={{ left: 0, right: 300 }}
/>
// As a ref to another component
function MyComponent() {
const constraintsRef = useRef(null)
return (
<Frame ref={constraintsRef} width={400} height={400}>
<Frame drag dragConstraints={constraintsRef} />
</Frame>
)
}
dragElastic: boolean | number
这个属性用来设置拖拽的时候能够超出限制区域的效果。0就是没有这样的效果,1是最大的效果,0.5是默认的设置。
<Frame
drag={true}
dragConstraints={{ left: 0, right: 300 }}
dragElastic={0.2}
/>
dragMomentum: boolean
设置拖拽结束后的一个运动效果。默认是true。
<Frame
drag={true}
dragConstraints={{ left: 0, right: 300 }}
dragMomentum={false}
/>
dragTransition: InertiaOptions
这个可以用来修改拖拽结束后的惯性效果参数。当我们拖拽一个Frame标签,当我们放开的时候,它会有一定惯性的动画效果,这是根据你拖拽结束时的速度来计算生成的,当然你也可以进行自定义。你可以参看Inertia部分的内容,里面有更具体的其他参数的设置。
<Frame
drag={true}
dragTransition={{ bounceStiffness: 600, bounceDamping: 10 }}
/>
dragPropagation: boolean
允许拖拽操作事件传递到子组件中,默认是设置为false。
<Frame drag="x" dragPropagation={true} />
Last updated
Was this helpful?