Playground

Canvas instance

> API Detail

const ctx = useClientContext()

console.log(ctx.playground)

config

Canvas configuration, provides zoom, scroll, etc.

> API Detail

updateConfig

  • zoom number Current zoom ratio
  • scrollX
  • scrollY
  • minZoom
  • maxZoom
  • readonly
  • disabled
  • width
  • height
// get current config state
ctx.playground.config.config.zoom
ctx.playground.config.config.readonly

// updateConfig
ctx.playground.config.updateConfig({
  zoom: 0.8,
  minZoom: 0.1,
  maxZoom: 2,
  readonly: true
})

fitView

Node fit canvas window, need to pass in the node's bounds

/**
 * Fit size
 * @param bounds {Rectangle} Target size
 * @param easing {number} Whether to start animation, default is true
 * @param padding {number} Boundary padding
 */
ctx.playground.config.fitView(node.bounds, true, 10)

scrollToView

Specify the node position and scroll to the canvas visible area, if the position is already in the visible area, it will not scroll unless scrollToCenter is forced to scroll


/**
 * Detailed parameter description
 * @param opts {PlaygroundConfigRevealOpts}
**/
interface PlaygroundConfigRevealOpts {
  entities?: Entity[]
  position?: PositionSchema // Scroll to the specified position and center
  bounds?: Rectangle // Scroll bounds
  scrollDelta?: PositionSchema
  zoom?: number // Need to scale the ratio
  easing?: boolean // Whether to start animation, default is true
  easingDuration?: number // Default 500 ms
  scrollToCenter?: boolean // Whether to force scroll to center
}

ctx.playground.config.scrollToView({
  bounds: ctx.document.getNode('start').bounds,
})

zoomin

Zoom In

zoomout

Zoom Out

getPoseFromMouseEvent

Convert browser mouse position to canvas coordinate system


const pos: { x: number, y: number } = ctx.playground.config.getPoseFromMouseEvent(domMouseEvent)

scroll

Scroll canvas, need to pass in the scroll position, and whether to smooth scroll, scroll time

ctx.playground.config.scroll({ scrollX: 100, scrollY: 100 }, true, 300)

isViewportVisible

Determine whether the current node is within the viewport

ctx.playground.config.isViewportVisible(node.bounds)