😍
Framer API 中文版
  • 写在前面
  • 从这里开始
    • 介绍
      • 快速开始
      • 基础
    • 教程
      • 准备 Setup
      • 引入 Slider 组件
      • Slider组件的元素
      • 拖动 & MotionValue
      • Hooks & 传递数据
      • 完成
      • 回顾
    • 简要案例
      • Frame
      • Stack
      • Animate
      • Gestures
      • Dragging 拖拽
      • Scrolling 滚动
      • Paging 翻页
      • Tranforms 变换
      • Variants 动画状态组
  • LIBRARY 库
    • Frame
      • Layout 布局
      • Visual 视觉
      • Transform 变换
      • Animation 动画
      • Transition 过渡
      • Variants 动画状态组
      • Tap 点击
      • Hover 悬浮
      • Pan
      • Drag
      • Types
    • Animation
      • Overview
      • Animation controls
      • Tween
      • Spring
      • Inertia 惯性
      • Orchestration
      • Types
    • Color
      • Create
      • Modify
      • Convert
      • Compare
      • Models
    • Page
      • Content
      • Padding
      • Events
      • Effects
      • PageEffectInfo
    • Scroll
      • Sizing
      • Content
      • Events
    • Stack
      • Content
      • Padding
    • Utilities
      • Transfrom
      • useTransform
      • useAnimation
      • useCycle
      • useMotionValue
      • useSpring
      • useViewportScroll
  • FRAMER X
    • Assets
      • Functions
    • Data & Overrides
    • CanvasComponents
      • Canvas.tsx
      • Layout
      • Colors
    • PropertyControls
      • Adding Controls
      • Hiding Controls
      • Array
      • Boolean
      • Color
      • ComponentInstance
      • Enum
      • File
      • FusedNumber
      • Image
      • Number
      • SegmentedEnum
      • String
    • Render Target
      • Properties
      • Functions
Powered by GitBook
On this page

Was this helpful?

  1. LIBRARY 库
  2. Frame

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} />

PreviousPanNextTypes

Last updated 5 years ago

Was this helpful?