视图控制
控制视图的缩放,支持放大、缩小、fit、fit-width、fit-height 视图, 支持聚焦元素,聚焦区域。
安装插件
需要安装 view 插件才能使用,点此访问 Github 仓库。
sh
npm install @leafer-in/view
sh
pnpm add @leafer-in/view
sh
yarn add @leafer-in/view
sh
bun add @leafer-in/view
或通过 script 标签引入,使用全局变量 LeaferIN.view 访问插件内部功能。
html
<script src="https://unpkg.com/@leafer-in/view@1.5.3/dist/view.min.js"></script>
html
<script src="https://unpkg.com/@leafer-in/view@1.5.3/dist/view.js"></script>
归属
Leafer 元素
关键方法
zoom ( zoomType: IZoomType
, padding?: IFourNumber
, fixedScale?: boolean
, transition?: ITranstion
): IBoundsData
zoomType
为缩放类型, 支持放大、缩小、fit、fit-width、fit-height 视图,聚焦元素、区域。
padding
参数表示四周留白边距(仅限于zoomType
为 fit、元素、区域时有效)
fixedScale
参数表示是否只进行位移,不缩放(聚焦元素时可能会需要此功能)。
transition
参数表示是否进行 动画 过渡。
函数返回一个缩放后的焦点区域(世界坐标系)。
ts
type IZoomType =
| 'in' // 放大 (从画布中心缩放)
| 'out' // 缩小
| 'fit' // 缩放到合适大小,并居中显示
| 'fit-width' // 缩放到合适大小,以宽度为主
| 'fit-height' // 缩放到合适大小,以高度为主
| number // 指定缩放比例 (从画布中心缩放)
| IUI // 聚焦到某一个元素
| IUI[] // 聚焦到一组元素
| IBoundsData // 聚焦到指定区域(page坐标系),当宽或高为0时,会自动按画布比例补全
ts
// 缩放到合适大小,并居中显示
leafer.zoom('fit')
// 动画过渡
leafer.zoom('fit', null, null, true)
leafer.zoom('fit', null, null, 2) // 过渡 2 秒
示例
放大
ts
// #视图控制 [放大]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom('in')
}, 1000)
缩小
ts
// #视图控制 [缩小]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom('out')
}, 1000)
指定缩放值
ts
// #视图控制 [指定缩放值]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom(1.5)
}, 1000)
缩放到合适大小
ts
// #视图控制 [缩放到合适大小]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom('fit', 100)
}, 1000)
让画布内容居中显示
ts
// #视图控制 [让画布内容居中显示]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom('fit', 0, true)
}, 1000)
聚焦到指定元素
ts
// #视图控制 [聚焦到指定元素]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
const rect = Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400)
app.tree.add(rect)
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom(rect, [100, 50])
}, 1000)
不缩放画布,只进行位移
ts
// #视图控制 [聚焦到指定元素 - 不缩放画布,只进行位移]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
const rect = Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 100, 100)
app.tree.add(rect)
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 300, 100))
setTimeout(() => {
app.tree.zoom(rect, 0, true)
}, 1000)
聚焦到指定区域
ts
// #视图控制 [聚焦到指定区域]
import { App, Rect } from 'leafer-ui'
import '@leafer-in/editor' // 导入图形编辑器插件
import '@leafer-in/viewport' // 导入视口插件(可选)
import '@leafer-in/view' // 导入视图控制插件 //
const app = new App({ view: window, editor: {} })
app.tree.add(Rect.one({ editable: true, fill: '#FEB027', cornerRadius: [20, 0, 0, 20] }, 500, 400))
app.tree.add(Rect.one({ editable: true, fill: '#FFE04B', cornerRadius: [0, 20, 20, 0] }, 650, 400))
setTimeout(() => {
app.tree.zoom({ x: 650, y: 400, width: 100, height: 100 }, [100, 20, 50, 20])
}, 1000)