Skip to content

视图控制

mark-img 提供了丰富的视图控制能力,包括缩放、平移、只读模式和选择模式。

缩放

鼠标滚轮缩放

默认支持鼠标滚轮缩放画布,无需额外配置。

编程式缩放

ts
// 放大(+1 放大,-1 缩小)
imgMark.scale(+1, 'center', 'image')
imgMark.scale(-1, 'center', 'image')

// 获取当前缩放比例
const currentScale = imgMark.getCurrentScale()

// 缩放到指定配置
imgMark.scaleTo(imgMark.options.initScaleConfig, 'center', 'image')

设置缩放限制

ts
// 设置最小缩放
imgMark.setMinScale(0.1)

// 设置最大缩放
imgMark.setMaxScale(10)

// 也可以用预设值:'fit' | 'original' | 'width' | 'height' | 'cover'
imgMark.setMinScale('fit')

监听缩放事件

ts
imgMark.on('scale', (scale) => {
	console.log('当前缩放', (scale * 100).toFixed(0) + '%')
})

更多缩放相关 API 见 构造函数方法

平移

鼠标拖拽平移

默认支持按住鼠标左键拖动画布。绘制过程中按住 Space 可临时切换到平移模式。

编程式平移

ts
// 移动到预设位置
imgMark.moveTo('center')
imgMark.moveTo('left-top')

// 移动到指定坐标
imgMark.move([100, 200])

重置位置和缩放

ts
imgMark.scaleTo(imgMark.options.initScaleConfig, 'center', 'image')
imgMark.moveTo('center')

禁用交互

ts
// 禁用/启用拖动
imgMark.setInteractiveMove(false)
imgMark.setInteractiveMove(true)

// 禁用/启用缩放
imgMark.setInteractiveScale(false)
imgMark.setInteractiveScale(true)

只读模式

只读模式下,用户无法绘制、编辑或移动图形:

ts
// 设置只读
imgMark.setReadonly(true)

// 取消只读
imgMark.setReadonly(false)

监听只读变化

ts
imgMark.on('readonly_change', (readonly) => {
	console.log('只读模式', readonly ? '开启' : '关闭')
})

选择模式

通过 Selection Plugin 控制单选/多选:

ts
const selectionPlugin = imgMark.getSelectionPlugin()

// 切换为单选模式
selectionPlugin?.mode('single')

// 切换为多选模式
selectionPlugin?.mode('multiple')

多选模式下,按住 Ctrl/Command 点击可选中多个图形。

编程式选择

ts
const selectionPlugin = imgMark.getSelectionPlugin()

// 选中指定图形
selectionPlugin?.selectShape(shapeInstance)

// 批量选中
selectionPlugin?.selectShapes(shapeInstances)

// 取消选中
selectionPlugin?.unselectShape(shapeInstance)

// 清空所有选中
selectionPlugin?.clear()

监听选中变化

ts
imgMark.on('selection_select_list_change', (list) => {
	console.log('选中了', list.length, '个图形')
})

绘制范围限制

控制图形是否能超出图片边界:

ts
// 禁止所有操作超出图片(绘制、移动、编辑)
imgMark.setEnableShapeOutOfImg(false)

// 也可以分别控制
imgMark.setEnableDrawShapeOutOfImg(false)  // 绘制
imgMark.setEnableMoveShapeOutOfImg(false)  // 移动
imgMark.setEnableEditShapeOutOfImg(false)  // 编辑