@leafer-in/viewport 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/viewport.cjs +7 -2
- package/dist/viewport.esm.js +7 -2
- package/dist/viewport.esm.min.js +1 -1
- package/dist/viewport.esm.min.js.map +1 -1
- package/dist/viewport.js +7 -2
- package/dist/viewport.min.cjs +1 -1
- package/dist/viewport.min.cjs.map +1 -1
- package/dist/viewport.min.js +1 -1
- package/dist/viewport.min.js.map +1 -1
- package/package.json +4 -4
- package/src/type/viewport.ts +7 -2
package/dist/viewport.cjs
CHANGED
|
@@ -27,9 +27,14 @@ function addViewport(leafer, mergeConfig, custom) {
|
|
|
27
27
|
}), leafer.on_(core.MoveEvent.END, e => {
|
|
28
28
|
core.LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY));
|
|
29
29
|
}), leafer.on_(core.ZoomEvent.BEFORE_ZOOM, e => {
|
|
30
|
-
const {zoomLayer: zoomLayer} = leafer;
|
|
30
|
+
const {zoomLayer: zoomLayer, layouter: layouter} = leafer;
|
|
31
31
|
const changeScale = leafer.getValidScale(e.scale);
|
|
32
|
-
if (changeScale !== 1)
|
|
32
|
+
if (changeScale !== 1) {
|
|
33
|
+
layouter.stop();
|
|
34
|
+
core.LeafHelper.updateMatrix(leafer);
|
|
35
|
+
zoomLayer.scaleOfWorld(e, changeScale);
|
|
36
|
+
layouter.start();
|
|
37
|
+
}
|
|
33
38
|
}));
|
|
34
39
|
}
|
|
35
40
|
|
package/dist/viewport.esm.js
CHANGED
|
@@ -25,9 +25,14 @@ function addViewport(leafer, mergeConfig, custom) {
|
|
|
25
25
|
}), leafer.on_(MoveEvent.END, e => {
|
|
26
26
|
LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY));
|
|
27
27
|
}), leafer.on_(ZoomEvent.BEFORE_ZOOM, e => {
|
|
28
|
-
const {zoomLayer: zoomLayer} = leafer;
|
|
28
|
+
const {zoomLayer: zoomLayer, layouter: layouter} = leafer;
|
|
29
29
|
const changeScale = leafer.getValidScale(e.scale);
|
|
30
|
-
if (changeScale !== 1)
|
|
30
|
+
if (changeScale !== 1) {
|
|
31
|
+
layouter.stop();
|
|
32
|
+
LeafHelper.updateMatrix(leafer);
|
|
33
|
+
zoomLayer.scaleOfWorld(e, changeScale);
|
|
34
|
+
layouter.start();
|
|
35
|
+
}
|
|
31
36
|
}));
|
|
32
37
|
}
|
|
33
38
|
|
package/dist/viewport.esm.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{MoveEvent as t,LeafHelper as e,ZoomEvent as
|
|
1
|
+
import{MoveEvent as t,LeafHelper as e,ZoomEvent as a,DataHelper as o,Debug as n,PointHelper as i,MathHelper as s,Platform as r,RotateEvent as c,Leafer as m,Bounds as l,Point as h,DragBoundsHelper as u,InteractionBase as g,isObject as d,Dragger as v,isNumber as f,BoundsHelper as p,Plugin as y}from"@leafer-ui/core";function D(t){const{scroll:e,disabled:a}=t.app.config.move;return!e||a?"":!0===e?"free":e}function O(o,n,i){M(o.parentApp?o.parentApp:o,n),o.isApp||i||o.__eventIds.push(o.on_(t.BEFORE_MOVE,t=>{const e=o.getValidMove(t.moveX,t.moveY,!1);if(D(o).includes("limit")){const a=o.getValidMove(0,0);if(a.x||a.y){const o=100,n=200,i="drag"===t.moveType?.3:.05;Math.abs(a.x)>o?e.x=0:e.x*=i,Math.abs(a.y)>n?e.y=0:e.y*=i}}o.zoomLayer.move(e)}),o.on_(t.DRAG_ANIMATE,()=>{const t=o.getValidMove(0,0);(t.x||t.y)&&o.interaction.stopDragAnimate()}),o.on_(t.END,t=>{e.animateMove(o.zoomLayer,o.getValidMove(t.moveX,t.moveY))}),o.on_(a.BEFORE_ZOOM,t=>{const{zoomLayer:a,layouter:n}=o,i=o.getValidScale(t.scale);1!==i&&(n.stop(),e.updateMatrix(o),a.scaleOfWorld(t,i),n.start())}))}function M(t,e){const a={wheel:{preventDefault:!0},touch:{preventDefault:!0},pointer:{preventDefaultMenu:!0}};e&&o.assign(a,e),o.assign(t.config,a,t.userConfig)}const b=n.get("LeaferTypeCreator"),T={list:{},register(t,e){x[t]&&b.repeat(t),x[t]=e},run(t,e){const a=x[t];a&&a(e)}},{list:x,register:E}=T;E("viewport",O),E("custom",function(t){O(t,null,!0)}),E("design",function(t){O(t,{zoom:{min:.01,max:256},move:{holdSpaceKey:!0,holdMiddleKey:!0}})}),E("document",function(t){O(t,{zoom:{min:1},move:{scroll:"limit"}})});const z={state:{type:"none",typeCount:0,startTime:0,totalData:null,center:{}},getData(t){const e=t[0],a=t[1],o=i.getCenter(e.from,a.from),n=i.getCenter(e.to,a.to),s={x:n.x-o.x,y:n.y-o.y},r=i.getDistance(e.from,a.from);return{move:s,scale:i.getDistance(e.to,a.to)/r,rotation:i.getRotation(e.from,a.from,e.to,a.to),center:n}},getType(t,e){const a=Math.hypot(t.move.x,t.move.y)/(e.move||5),o=Math.abs(t.scale-1)/(e.scale||.03),n=Math.abs(t.rotation)/(e.rotation||2);return a<1&&o<1&&n<1?"none":a>=o&&a>=n?"move":o>=n?"zoom":"rotate"},detect(t,e){const{state:a}=j,o=j.getType(t,e);if(a.totalData||(a.startTime=Date.now(),a.center=t.center),j.add(t,a.totalData),a.totalData=t,o===a.type){if(a.typeCount++,a.typeCount>=(e.count||3)&&"none"!==o)return o}else a.type=o,a.typeCount=1;return Date.now()-a.startTime>=(e.time||160)?j.getType(a.totalData,e):"none"},add(t,e){e&&(i.move(t.move,e.move),t.scale*=e.scale,t.rotation+=e.rotation,t.center=e.center)},reset(){const{state:t}=j;t.type="none",t.typeCount=0,t.startTime=0,t.totalData=null}},j=z,{abs:R,max:X}=Math,{sign:Y,within:A}=s,S={getMove(t,e){let{moveSpeed:a}=e,{deltaX:o,deltaY:n}=t;t.shiftKey&&!o&&(o=n,n=0);const i=R(o),s=R(n);return i>50&&(o=X(50,i/3)*Y(o)),s>50&&(n=X(50,s/3)*Y(n)),{x:-o*a*2,y:-n*a*2}},getScale(t,e){let a,o=1,{zoomMode:n,zoomSpeed:i}=e;const s=t.deltaY||t.deltaX;if(n?(a="mouse"===n||!t.deltaX&&(r.intWheelDeltaY?Math.abs(s)>17:Math.ceil(s)!==s),(t.shiftKey||t.metaKey||t.ctrlKey)&&(a=!0)):a=!t.shiftKey&&(t.metaKey||t.ctrlKey),a){i=A(i,0,1);const a=t.deltaY?e.delta.y:e.delta.x,n=A(1-R(s)/(4*a)*i,.5,2);o=s>0?n:1/n}return o}};let _,w,C,V;class K{get transforming(){return this.moving||this.zooming||this.rotating}get moving(){return!!this.moveData}get zooming(){return!!this.zoomData}get rotating(){return!!this.rotateData}constructor(t){this.interaction=t}move(e){const{interaction:a}=this;e.moveType||(e.moveType="move"),this.moveData||(this.setPath(e),_=0,w=0,this.moveData=Object.assign(Object.assign({},e),{moveX:0,moveY:0,totalX:_,totalY:w}),a.emit(t.START,this.moveData)),e.path=this.moveData.path,e.totalX=_+=e.moveX,e.totalY=w+=e.moveY,a.emit(t.BEFORE_MOVE,e),a.emit(t.MOVE,e),this.transformEndWait()}zoom(t){const{interaction:e}=this;this.zoomData||(this.setPath(t),C=1,this.zoomData=Object.assign(Object.assign({},t),{scale:1,totalScale:C}),e.emit(a.START,this.zoomData)),t.path=this.zoomData.path,t.totalScale=C*=t.scale,e.emit(a.BEFORE_ZOOM,t),e.emit(a.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;this.rotateData||(this.setPath(t),V=0,this.rotateData=Object.assign(Object.assign({},t),{rotation:0,totalRotation:V}),e.emit(c.START,this.rotateData)),t.path=this.rotateData.path,t.totalRotation=V+=t.rotation,e.emit(c.BEFORE_ROTATE,t),e.emit(c.ROTATE,t),this.transformEndWait()}setPath(t){const{interaction:e}=this,{path:a}=e.selector.getByPoint(t,e.hitRadius);t.path=a,e.cancelHover()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout(()=>{this.transformEnd()},this.interaction.p.transformTime)}transformEnd(){const{interaction:e,moveData:o,zoomData:n,rotateData:i}=this;o&&e.emit(t.END,Object.assign(Object.assign({},o),{totalX:_,totalY:w})),n&&e.emit(a.END,Object.assign(Object.assign({},n),{totalScale:C})),i&&e.emit(c.END,Object.assign(Object.assign({},i),{totalRotation:V})),this.reset()}reset(){this.zoomData=this.moveData=this.rotateData=null}destroy(){this.reset()}}const W=m.prototype,B=new l,k=new h;function L(t,e){return Object.assign(Object.assign({},e),{moveX:t.x,moveY:t.y})}function P(t,e){return Object.assign(Object.assign({},e),{scale:t})}W.initType=function(t){T.run(t,this)},W.getValidMove=function(t,e,a=!0){const{disabled:o,scrollSpread:n}=this.app.config.move;k.set(t,e);const i=D(this);return i&&(i.includes("x")?k.y=0:i.includes("y")?k.x=0:Math.abs(k.x)>Math.abs(k.y)?k.y=0:k.x=0,a&&i.includes("limit")&&(B.set(this.__world).addPoint(this.zoomLayer),n&&B.spread(n),u.getValidMove(B,this.canvas.bounds,"auto",k,!0),i.includes("x")?k.y=0:i.includes("y")&&(k.x=0))),{x:o?0:k.x,y:o?0:k.y}},W.getValidScale=function(t){const{scaleX:e}=this.zoomLayer.__,{min:a,max:o,disabled:n}=this.app.config.zoom,i=Math.abs(e*t);return a&&i<a?t=a/e:o&&i>o&&(t=o/e),n?1:t};const N=g.prototype;N.createTransformer=function(){this.transformer=new K(this)},N.move=function(t){this.transformer.move(t)},N.zoom=function(t){this.transformer.zoom(t)},N.rotate=function(t){this.transformer.rotate(t)},N.transformEnd=function(){this.transformer.transformEnd()},N.wheel=function(t){const{wheel:e,pointer:a}=this.config,{posDeltaSpeed:o,negDeltaSpeed:n}=e;if(e.disabled)return;t.deltaX>0?o&&(t.deltaX*=o):n&&(t.deltaX*=n),t.deltaY>0?o&&(t.deltaY*=o):n&&(t.deltaY*=n);const s=e.getScale?e.getScale(t,e):S.getScale(t,e);if(1!==s)this.zoom(P(s,t));else{const o=e.getMove?e.getMove(t,e):S.getMove(t,e);a.snap&&i.round(o),this.move(L(o,t))}},N.multiTouch=function(t,e){const{disabled:a,singleGesture:o}=this.config.multiTouch;if(a)return;this.pointerWaitCancel();let n=z.getData(e),{moving:i,zooming:s,rotating:r}=this.transformer;if(o){if(!this.transformer.transforming){switch(z.detect(n,d(o)?o:{})){case"move":i=!0;break;case"zoom":s=!0;break;case"rotate":r=!0;break;default:return}z.reset()}i||(n.center=z.state.center)}else i=s=r=!0;var c,m;Object.assign(t,n.center),t.multiTouch=!0,r&&this.rotate((c=n.rotation,m=t,Object.assign(Object.assign({},m),{rotation:c}))),s&&this.zoom(P(n.scale,t)),i&&this.move(L(n.move,t))};const F=v.prototype,{abs:I,min:G,max:Z,hypot:H}=Math;F.checkDragEndAnimate=function(e){const{interaction:a}=this,o=this.canAnimate&&this.moving&&a.m.dragAnimate;if(o){const n=f(o)?o:.95,s=.15,r=150;let c,m,l,h=0,u=0,g=0,d=0,v=3;const{dragDataList:p}=this,y=p.length;for(let t=y-1;t>=Z(y-3,0)&&(l=p[t],!(l.time&&Date.now()-l.time>100));t--)c=v--,h+=l.moveX*c,u+=l.moveY*c,d+=c,m=H(l.moveX,l.moveY),m>g&&(g=m);if(d&&(h/=d,u/=d),g>8){const t=1.15+G((g-8)/17,1)*(1.6-1.15);h*=t,u*=t}const D=Z(I(h),I(u));D>r&&(m=r/D,h*=m,u*=m);const O=()=>{if(h*=n,u*=n,e=Object.assign({},e),I(h)<s&&I(u)<s)return this.dragEndReal(e);i.move(e,h,u),this.drag(e),this.animate(O),a.emit(t.DRAG_ANIMATE,e)};this.animate(O)}return o},F.animate=function(t,e){const a=t||this.animateWait;a&&this.interaction.target.nextRender(a,null,e),this.animateWait=t},F.stopAnimate=function(){this.animate(null,"off"),this.interaction.target.nextRender(()=>{this.dragData&&this.dragEndReal(this.dragData)})},F.checkDragOut=function(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)},F.autoMoveOnDragOut=function(t){const{interaction:e,downData:a,canDragOut:o}=this,{autoDistance:n,dragOut:s}=e.m;if(!s||!o||!n)return;const r=e.shrinkCanvasBounds,{x:c,y:m}=r,l=p.maxX(r),h=p.maxY(r),u=t.x<c?n:l<t.x?-n:0,g=t.y<m?n:h<t.y?-n:0;let d=0,v=0;this.autoMoveTimer=setInterval(()=>{d+=u,v+=g,i.move(a,u,g),i.move(this.dragData,u,g),e.move(Object.assign(Object.assign({},t),{moveX:u,moveY:g,totalX:d,totalY:v,moveType:"drag"})),e.pointerMoveReal(t)},10)},F.autoMoveCancel=function(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)},y.add("viewport");export{T as LeaferTypeCreator,z as MultiTouchHelper,K as Transformer,S as WheelEventHelper,O as addViewport,M as addViewportConfig};
|
|
2
2
|
//# sourceMappingURL=viewport.esm.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.esm.min.js","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) zoomLayer.scaleOfWorld(e, changeScale)\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","changeScale","getValidScale","scale","scaleOfWorld","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewport.esm.min.js","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer, layouter } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) {\n layouter.stop()\n LeafHelper.updateMatrix(leafer) // 节省一次重复布局\n zoomLayer.scaleOfWorld(e, changeScale)\n layouter.start()\n }\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","layouter","changeScale","getValidScale","scale","stop","updateMatrix","scaleOfWorld","start","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"2TAGM,SAAUA,EAAcC,GAC1B,MAAMC,OAAEA,EAAMC,SAAEA,GAAaF,EAAOG,IAAIC,OAAOC,KAC/C,OAASJ,GAAUC,EAAY,IAAiB,IAAXD,EAAkB,OAASA,CACpE,UCCgBK,EAAYN,EAAqBO,EAA6BC,GAC1EC,EAAkBT,EAAOU,UAAYV,EAAOU,UAAYV,EAAQO,GAC5DP,EAAOW,OAASH,GAEpBR,EAAOY,WAAWC,KACdb,EAAOc,IAAIC,EAAUC,YAAcC,IAC/B,MAAMZ,EAAOL,EAAOkB,aAAaD,EAAEE,MAAOF,EAAEG,OAAO,GAGnD,GAAIrB,EAAcC,GAAQqB,SAAS,SAAU,CACzC,MAAMC,EAAWtB,EAAOkB,aAAa,EAAG,GACxC,GAAII,EAASC,GAAKD,EAASE,EAAG,CAC1B,MAAMC,EAAO,IAAKC,EAAO,IAAKC,EAA4B,SAAfV,EAAEW,SAAsB,GAAM,IAErEC,KAAKC,IAAIR,EAASC,GAAKE,EAAMpB,EAAKkB,EAAI,EACrClB,EAAKkB,GAAKI,EAEXE,KAAKC,IAAIR,EAASE,GAAKE,EAAMrB,EAAKmB,EAAI,EACrCnB,EAAKmB,GAAKG,CACnB,CACJ,CAEA3B,EAAO+B,UAAU1B,KAAKA,KAE1BL,EAAOc,IAAIC,EAAUiB,aAAc,KAC/B,MAAMV,EAAWtB,EAAOkB,aAAa,EAAG,IACpCI,EAASC,GAAKD,EAASE,IAAGxB,EAAOiC,YAAYC,oBAErDlC,EAAOc,IAAIC,EAAUoB,IAAMlB,IACvBmB,EAAWC,YAAYrC,EAAO+B,UAAW/B,EAAOkB,aAAaD,EAAEE,MAAOF,EAAEG,UAE5EpB,EAAOc,IAAIwB,EAAUC,YAActB,IAC/B,MAAMc,UAAEA,EAASS,SAAEA,GAAaxC,EAC1ByC,EAAczC,EAAO0C,cAAczB,EAAE0B,OACvB,IAAhBF,IACAD,EAASI,OACTR,EAAWS,aAAa7C,GACxB+B,EAAUe,aAAa7B,EAAGwB,GAC1BD,EAASO,WAIzB,CAEM,SAAUtC,EAAkBT,EAAqBO,GACnD,MAAMyC,EAAgC,CAClCC,MAAO,CAAEC,gBAAgB,GACzBC,MAAO,CAAED,gBAAgB,GACzBE,QAAS,CAAEC,oBAAoB,IAE/B9C,GAAa+C,EAAWC,OAAOP,EAAgBzC,GACnD+C,EAAWC,OAAOvD,EAAOI,OAAQ4C,EAAgBhD,EAAOwD,WAC5D,CCjDA,MAAMC,EAAQC,EAAMC,IAAI,qBAEXC,EAAoB,CAE7BC,KAAM,CAAA,EAEN,QAAAC,CAASC,EAAcC,GACnBH,EAAKE,IAASN,EAAMQ,OAAOF,GAC3BF,EAAKE,GAAQC,CACjB,EAEA,GAAAE,CAAIH,EAAc/D,GACd,MAAMgE,EAAKH,EAAKE,GAChBC,GAAMA,EAAGhE,EACb,IAIE6D,KAAEA,EAAIC,SAAEA,GAAaF,EAE3BE,EAAS,WAAYxD,GACrBwD,EAAS,SC1BH,SAAiB9D,GACnBM,EAAYN,EAAQ,MAAM,EAC9B,GDyBA8D,EAAS,SE3BH,SAAiB9D,GACnBM,EAAYN,EAAQ,CAChBmE,KAAM,CACFC,IAAK,IACLC,IAAK,KAEThE,KAAM,CACFiE,cAAc,EACdC,eAAe,IAG3B,GFiBAT,EAAS,WG5BH,SAAmB9D,GACrBM,EAAYN,EAAQ,CAChBmE,KAAM,CAAEC,IAAK,GACb/D,KAAM,CAAEJ,OAAQ,UAExB,GCLO,MAAMuE,EAAmB,CAE5BC,MAAO,CACHC,KAAM,OACNC,UAAW,EACXC,UAAW,EACXC,UAAW,KACXC,OAAQ,CAAA,GAGZ,OAAAC,CAAQlB,GACJ,MAAMmB,EAAInB,EAAK,GAAIoB,EAAIpB,EAAK,GACtBqB,EAAaC,EAAYC,UAAUJ,EAAEK,KAAMJ,EAAEI,MAC7CP,EAASK,EAAYC,UAAUJ,EAAEM,GAAIL,EAAEK,IACvCjF,EAAO,CAAEkB,EAAGuD,EAAOvD,EAAI2D,EAAW3D,EAAGC,EAAGsD,EAAOtD,EAAI0D,EAAW1D,GAE9D+D,EAAeJ,EAAYK,YAAYR,EAAEK,KAAMJ,EAAEI,MAKvD,MAAO,CAAEhF,OAAMsC,MAJEwC,EAAYK,YAAYR,EAAEM,GAAIL,EAAEK,IACxBC,EAGHE,SADLN,EAAYO,YAAYV,EAAEK,KAAMJ,EAAEI,KAAML,EAAEM,GAAIL,EAAEK,IACjCR,SACpC,EAEA,OAAAa,CAAQC,EAAuBxF,GAC3B,MAAMyF,EAAYhE,KAAKiE,MAAMF,EAAKvF,KAAKkB,EAAGqE,EAAKvF,KAAKmB,IAAMpB,EAAOC,MAAQ,GACnE0F,EAAalE,KAAKC,IAAI8D,EAAKjD,MAAQ,IAAMvC,EAAOuC,OAAS,KACzDqD,EAAcnE,KAAKC,IAAI8D,EAAKH,WAAarF,EAAOqF,UAAY,GAElE,OAAII,EAAY,GAAKE,EAAa,GAAKC,EAAc,EAAU,OAC3DH,GAAaE,GAAcF,GAAaG,EAAoB,OAC5DD,GAAcC,EAAoB,OAC/B,QACX,EAGA,MAAAC,CAAOL,EAAuBxF,GAC1B,MAAMqE,MAAEA,GAAUyB,EACZxB,EAAOwB,EAAEP,QAAQC,EAAMxF,GAU7B,GARKqE,EAAMI,YACPJ,EAAMG,UAAYuB,KAAKC,MACvB3B,EAAMK,OAASc,EAAKd,QAGxBoB,EAAEG,IAAIT,EAAMnB,EAAMI,WAClBJ,EAAMI,UAAYe,EAEdlB,IAASD,EAAMC,MAEf,GADAD,EAAME,YACFF,EAAME,YAAcvE,EAAOkG,OAAS,IAAe,SAAT5B,EAAiB,OAAOA,OAEtED,EAAMC,KAAOA,EACbD,EAAME,UAAY,EAGtB,OAAKwB,KAAKC,MAAQ3B,EAAMG,YAAexE,EAAOmG,MAAQ,KAAaL,EAAEP,QAAQlB,EAAMI,UAAWzE,GAEvF,MACX,EAEA,GAAAiG,CAAIT,EAAuBS,GAClBA,IACLlB,EAAY9E,KAAKuF,EAAKvF,KAAMgG,EAAIhG,MAChCuF,EAAKjD,OAAS0D,EAAI1D,MAClBiD,EAAKH,UAAYY,EAAIZ,SACrBG,EAAKd,OAASuB,EAAIvB,OACtB,EAEA,KAAA0B,GACI,MAAM/B,MAAEA,GAAUyB,EAClBzB,EAAMC,KAAO,OACbD,EAAME,UAAY,EAClBF,EAAMG,UAAY,EAClBH,EAAMI,UAAY,IACtB,GAIEqB,EAAI1B,GC/EJ1C,IAAEA,EAAGuC,IAAEA,GAAQxC,MAAM4E,KAAEA,EAAIC,OAAEA,GAAWC,EAEjCC,EAAmB,CAE5B,OAAAC,CAAQC,EAAoB1G,GACxB,IAAI2G,UAAEA,GAAc3G,GAChB4G,OAAEA,EAAMC,OAAEA,GAAWH,EACrBA,EAAMI,WAAaF,IACnBA,EAASC,EACTA,EAAS,GAEb,MAAME,EAAOrF,EAAIkF,GAASI,EAAOtF,EAAImF,GAGrC,OAFIE,EAAO,KAAIH,EAAS3C,EAAI,GAAI8C,EAAO,GAAKV,EAAKO,IAC7CI,EAAO,KAAIH,EAAS5C,EAAI,GAAI+C,EAAO,GAAKX,EAAKQ,IAC1C,CAAE1F,GAAIyF,EAASD,EAAY,EAAGvF,GAAIyF,EAASF,EAAY,EAClE,EAEA,QAAAM,CAASP,EAAoB1G,GAEzB,IAAI+D,EACAxB,EAAQ,GACR2E,SAAEA,EAAQC,UAAEA,GAAcnH,EAE9B,MAAMoH,EAAQV,EAAMG,QAAUH,EAAME,OAWpC,GATIM,GAGAnD,EAAqB,UAAbmD,IAAiCR,EAAME,SAAWS,EAASC,eAAiB7F,KAAKC,IAAI0F,GAAS,GAAK3F,KAAK8F,KAAKH,KAAWA,IAC5HV,EAAMI,UAAYJ,EAAMc,SAAWd,EAAMe,WAAS1D,GAAO,IAE7DA,GAAQ2C,EAAMI,WAAaJ,EAAMc,SAAWd,EAAMe,SAGlD1D,EAAM,CACNoD,EAAYb,EAAOa,EAAW,EAAG,GACjC,MAAMnD,EAAM0C,EAAMG,OAAS7G,EAAOoH,MAAMhG,EAAIpB,EAAOoH,MAAMjG,EACnDuG,EAAWpB,EAAO,EAAI5E,EAAI0F,IAAgB,EAANpD,GAAWmD,EAAW,GAAK,GACrE5E,EAAQ6E,EAAQ,EAAIM,EAAW,EAAIA,CACvC,CAEA,OAAOnF,CACX,GC1CJ,IAAIoF,EAAgBC,EAAgBC,EAAoBC,QAE3CC,EAET,gBAAWC,GAA0B,OAAOC,KAAKC,QAAUD,KAAKE,SAAWF,KAAKG,QAAS,CACzF,UAAWF,GAAoB,QAASD,KAAKI,QAAS,CACtD,WAAWF,GAAqB,QAASF,KAAKK,QAAS,CACvD,YAAWF,GAAsB,QAASH,KAAKM,UAAW,CAS1D,WAAAC,CAAY3G,GACRoG,KAAKpG,YAAcA,CACvB,CAEO,IAAA5B,CAAKuF,GACR,MAAM3D,YAAEA,GAAgBoG,KACnBzC,EAAKhE,WAAUgE,EAAKhE,SAAW,QAE/ByG,KAAKI,WACNJ,KAAKQ,QAAQjD,GACbmC,EAAS,EAAGC,EAAS,EACrBK,KAAKI,SAAQK,OAAAvF,OAAAuF,OAAAvF,OAAA,GAAQqC,GAAI,CAAEzE,MAAO,EAAGC,MAAO,EAAG2G,SAAQC,WACvD/F,EAAY8G,KAAKhI,EAAUiI,MAAOX,KAAKI,WAG3C7C,EAAKqD,KAAOZ,KAAKI,SAASQ,KAC1BrD,EAAKmC,OAASA,GAAkBnC,EAAKzE,MACrCyE,EAAKoC,OAASA,GAAkBpC,EAAKxE,MACrCa,EAAY8G,KAAKhI,EAAUC,YAAa4E,GACxC3D,EAAY8G,KAAKhI,EAAUmI,KAAMtD,GAEjCyC,KAAKc,kBACT,CAEO,IAAAhF,CAAKyB,GACR,MAAM3D,YAAEA,GAAgBoG,KAEnBA,KAAKK,WACNL,KAAKQ,QAAQjD,GACbqC,EAAa,EACbI,KAAKK,SAAQI,OAAAvF,OAAAuF,OAAAvF,OAAA,GAAQqC,GAAI,CAAEjD,MAAO,EAAGsF,eACrChG,EAAY8G,KAAKzG,EAAU0G,MAAOX,KAAKK,WAG3C9C,EAAKqD,KAAOZ,KAAKK,SAASO,KAC1BrD,EAAKqC,WAAaA,GAA0BrC,EAAKjD,MACjDV,EAAY8G,KAAKzG,EAAUC,YAAaqD,GACxC3D,EAAY8G,KAAKzG,EAAU8G,KAAMxD,GAEjCyC,KAAKc,kBACT,CAEO,MAAAE,CAAOzD,GACV,MAAM3D,YAAEA,GAAgBoG,KAEnBA,KAAKM,aACNN,KAAKQ,QAAQjD,GACbsC,EAAgB,EAChBG,KAAKM,WAAUG,OAAAvF,OAAAuF,OAAAvF,OAAA,GAAQqC,GAAI,CAAEH,SAAU,EAAGyC,kBAC1CjG,EAAY8G,KAAKO,EAAYN,MAAOX,KAAKM,aAG7C/C,EAAKqD,KAAOZ,KAAKM,WAAWM,KAC5BrD,EAAKsC,cAAgBA,GAAgCtC,EAAKH,SAC1DxD,EAAY8G,KAAKO,EAAYC,cAAe3D,GAC5C3D,EAAY8G,KAAKO,EAAYE,OAAQ5D,GAErCyC,KAAKc,kBACT,CAEO,OAAAN,CAAQjD,GACX,MAAM3D,YAAEA,GAAgBoG,MAClBY,KAAEA,GAAShH,EAAYwH,SAASC,WAAW9D,EAAM3D,EAAY0H,WACnE/D,EAAKqD,KAAOA,EACZhH,EAAY2H,aAChB,CAEU,gBAAAT,GACNU,aAAaxB,KAAKyB,gBAClBzB,KAAKyB,eAAiBC,WAAW,KAC7B1B,KAAK2B,gBACN3B,KAAKpG,YAAYgI,EAAEC,cAC1B,CAEO,YAAAF,GACH,MAAM/H,YAAEA,EAAWwG,SAAEA,EAAQC,SAAEA,EAAQC,WAAEA,GAAeN,KACpDI,GAAUxG,EAAY8G,KAAKhI,EAAUoB,IAAK2G,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKkF,IAAUV,SAAQC,YACjEU,GAAUzG,EAAY8G,KAAKzG,EAAUH,IAAK2G,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKmF,GAAQ,CAAET,gBACzDU,GAAY1G,EAAY8G,KAAKO,EAAYnH,IAAK2G,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKoF,GAAU,CAAET,mBACnEG,KAAK7B,OACT,CAEO,KAAAA,GACH6B,KAAKK,SAAWL,KAAKI,SAAWJ,KAAKM,WAAa,IACtD,CAEO,OAAAwB,GACH9B,KAAK7B,OACT,ECrGJ,MAAMxG,EAASoK,EAAOC,UAChBC,EAAS,IAAIC,EAAUlK,EAAO,IAAImK,ECAxC,SAASC,EAAiBpK,EAAkByG,GACxC,OAAOgC,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKuD,GAAK,CAAE3F,MAAOd,EAAKkB,EAAGH,MAAOf,EAAKmB,GAClD,CAMA,SAASkJ,EAAiB/H,EAAemE,GACrC,OAAOgC,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKuD,GAAK,CAAEnE,SACvB,CDRA3C,EAAO2K,SAAW,SAAUjG,GACxBd,EAAkBM,IAAIQ,EAAM2D,KAChC,EAEArI,EAAOkB,aAAe,SAAUC,EAAeC,EAAewJ,GAAa,GACvE,MAAM1K,SAAEA,EAAQ2K,aAAEA,GAAiBxC,KAAKlI,IAAIC,OAAOC,KACnDA,EAAKyK,IAAI3J,EAAOC,GAEhB,MAAM2J,EAAahL,EAAcsI,MAgBjC,OAfI0C,IAEIA,EAAW1J,SAAS,KAAMhB,EAAKmB,EAAI,EAC9BuJ,EAAW1J,SAAS,KAAMhB,EAAKkB,EAAI,EACvCM,KAAKC,IAAIzB,EAAKkB,GAAKM,KAAKC,IAAIzB,EAAKmB,GAAKnB,EAAKmB,EAAI,EAAInB,EAAKkB,EAAI,EAE7DqJ,GAAcG,EAAW1J,SAAS,WAClCiJ,EAAOQ,IAAIzC,KAAK2C,SAASC,SAAS5C,KAAKtG,WACnC8I,GAAcP,EAAOY,OAAOL,GAChCM,EAAiBjK,aAAaoJ,EAAQjC,KAAK+C,OAAOd,OAAQ,OAAQjK,GAAM,GACpE0K,EAAW1J,SAAS,KAAMhB,EAAKmB,EAAI,EAC9BuJ,EAAW1J,SAAS,OAAMhB,EAAKkB,EAAI,KAI7C,CAAEA,EAAGrB,EAAW,EAAIG,EAAKkB,EAAGC,EAAGtB,EAAW,EAAIG,EAAKmB,EAC9D,EAEAxB,EAAO0C,cAAgB,SAAUD,GAC7B,MAAM4I,OAAEA,GAAWhD,KAAKtG,UAAUuJ,IAAIlH,IAAEA,EAAGC,IAAEA,EAAGnE,SAAEA,GAAamI,KAAKlI,IAAIC,OAAO+D,KAAM2D,EAAWjG,KAAKC,IAAIuJ,EAAS5I,GAGlH,OAFI2B,GAAO0D,EAAW1D,EAAK3B,EAAc2B,EAAMiH,EACtChH,GAAOyD,EAAWzD,IAAK5B,EAAc4B,EAAMgH,GAC7CnL,EAAW,EAAIuC,CAC1B,ECrBA,MAAMR,EAAcsJ,EAAgBlB,UAEpCpI,EAAYuJ,kBAAoB,WAC5BnD,KAAKoD,YAAc,IAAItD,EAAYE,KACvC,EAEApG,EAAY5B,KAAO,SAAUuF,GACzByC,KAAKoD,YAAYpL,KAAKuF,EAC1B,EAEA3D,EAAYkC,KAAO,SAAUyB,GACzByC,KAAKoD,YAAYtH,KAAKyB,EAC1B,EAEA3D,EAAYoH,OAAS,SAAUzD,GAC3ByC,KAAKoD,YAAYpC,OAAOzD,EAC5B,EAEA3D,EAAY+H,aAAe,WACvB3B,KAAKoD,YAAYzB,cACrB,EAGA/H,EAAYgB,MAAQ,SAAU2C,GAC1B,MAAM3C,MAAEA,EAAKG,QAAEA,GAAYiF,KAAKjI,QAAQsL,cAAEA,EAAaC,cAAEA,GAAkB1I,EAC3E,GAAIA,EAAM/C,SAAU,OAEhB0F,EAAKoB,OAAS,EAAG0E,IAAkB9F,EAAKoB,QAAU0E,GACjDC,IAAkB/F,EAAKoB,QAAU2E,GAElC/F,EAAKqB,OAAS,EAAGyE,IAAkB9F,EAAKqB,QAAUyE,GACjDC,IAAkB/F,EAAKqB,QAAU0E,GAEtC,MAAMhJ,EAAQM,EAAMoE,SAAWpE,EAAMoE,SAASzB,EAAM3C,GAAS2D,EAAiBS,SAASzB,EAAM3C,GAC7F,GAAc,IAAVN,EAAa0F,KAAKlE,KAAKuG,EAAiB/H,EAAOiD,QAC9C,CACD,MAAMvF,EAAO4C,EAAM4D,QAAU5D,EAAM4D,QAAQjB,EAAM3C,GAAS2D,EAAiBC,QAAQjB,EAAM3C,GACrFG,EAAQwI,MAAMzG,EAAY0G,MAAMxL,GACpCgI,KAAKhI,KAAKoK,EAAiBpK,EAAMuF,GACrC,CACJ,EAGA3D,EAAY6J,WAAa,SAAUlG,EAAqB/B,GACpD,MAAM3D,SAAEA,EAAQ6L,cAAEA,GAAkB1D,KAAKjI,OAAO0L,WAChD,GAAI5L,EAAU,OACdmI,KAAK2D,oBAEL,IAAIC,EAAczH,EAAiBO,QAAQlB,IACvCyE,OAAEA,EAAMC,QAAEA,EAAOC,SAAEA,GAAaH,KAAKoD,YAEzC,GAAIM,EAAe,CAEf,IAAK1D,KAAKoD,YAAYrD,aAAc,CAIhC,OAFa5D,EAAiByB,OAAOgG,EAAaC,EAASH,GAAiBA,EAAgB,KAGxF,IAAK,OAAQzD,GAAS,EAAM,MAC5B,IAAK,OAAQC,GAAU,EAAM,MAC7B,IAAK,SAAUC,GAAW,EAAM,MAChC,QAAS,OAGbhE,EAAiBgC,OAErB,CAEK8B,IAAQ2D,EAAYnH,OAASN,EAAiBC,MAAMK,OAE7D,MAAOwD,EAASC,EAAUC,GAAW,EA/EzC,IAA4B/C,EAAkBqB,EAiF1CgC,OAAOvF,OAAOqC,EAAMqG,EAAYnH,QAChCc,EAAKkG,YAAa,EAEdtD,GAAUH,KAAKgB,QApFK5D,EAoFqBwG,EAAYxG,SApFfqB,EAoFyBlB,EAnF5DkD,OAAAvF,OAAAuF,OAAAvF,OAAA,CAAA,EAAKuD,GAAK,CAAErB,eAoFf8C,GAASF,KAAKlE,KAAKuG,EAAiBuB,EAAYtJ,MAAOiD,IACvD0C,GAAQD,KAAKhI,KAAKoK,EAAiBwB,EAAY5L,KAAMuF,GAC7D,EC/FA,MAAMuG,EAAUC,EAAQ/B,WAClBvI,IAAEA,EAAGsC,IAAEA,EAAGC,IAAEA,EAAGyB,MAAEA,GAAUjE,KAEjCsK,EAAQE,oBAAsB,SAAUzG,GACpC,MAAM3D,YAAEA,GAAgBoG,KAClBiE,EAAcjE,KAAKkE,YAAclE,KAAKC,QAAUrG,EAAYuK,EAAEF,YAEpE,GAAIA,EAAa,CAEb,MAAMG,EAAUC,EAASJ,GAAeA,EAAc,IAChDK,EAAW,IACXC,EAAU,IAEhB,IACqBC,EAAuBC,EAAWC,EADnD5L,EAAQ,EAAGC,EAAQ,EAAG4L,EAAa,EACnCC,EAAc,EAAmBC,EAAI,EAEzC,MAAMC,aAAEA,GAAiB9E,KAAM+E,EAAMD,EAAaE,OAClD,IAAK,IAAIC,EAAIF,EAAM,EAAGE,GAAKjJ,EAAI+I,EAAM,EAAG,KACpCL,EAAQI,EAAaG,KACjBP,EAAMxG,MAASJ,KAAKC,MAAQ2G,EAAMxG,KAAO,MAFL+G,IAGxCT,EAASK,IAET/L,GAAS4L,EAAM5L,MAAQ0L,EACvBzL,GAAS2L,EAAM3L,MAAQyL,EACvBI,GAAeJ,EAEfC,EAAIhH,EAAMiH,EAAM5L,MAAO4L,EAAM3L,OACzB0L,EAAIE,IAAYA,EAAaF,GAKrC,GAFIG,IAAa9L,GAAS8L,EAAa7L,GAAS6L,GAE5CD,EAAa,EAAG,CAChB,MACMO,EAAQ,KADJnJ,GAAK4I,EAAa,GAAK,GAAI,IACX,IAAM,MAChC7L,GAASoM,EACTnM,GAASmM,CACb,CAEA,MAAMC,EAASnJ,EAAIvC,EAAIX,GAAQW,EAAIV,IAC/BoM,EAASZ,IACTE,EAAIF,EAAUY,EACdrM,GAAS2L,EACT1L,GAAS0L,GAGb,MAAMW,EAAO,KAKT,GAJAtM,GAASsL,EACTrL,GAASqL,EAET7G,EAAIkD,OAAAvF,OAAA,CAAA,EAAQqC,GACR9D,EAAIX,GAASwL,GAAY7K,EAAIV,GAASuL,EAAU,OAAOtE,KAAKqF,YAAY9H,GAE5ET,EAAY9E,KAAKuF,EAAMzE,EAAOC,GAC9BiH,KAAKsF,KAAK/H,GAEVyC,KAAKuF,QAAQH,GACbxL,EAAY8G,KAAKhI,EAAUiB,aAAc4D,IAG7CyC,KAAKuF,QAAQH,EACjB,CAEA,OAAOnB,CACX,EAEAH,EAAQyB,QAAU,SAAUC,EAAkBC,GAC1C,MAAMC,EAAcF,GAAQxF,KAAK0F,YAC7BA,GAAa1F,KAAKpG,YAAY+L,OAAOC,WAAWF,EAAa,KAAMD,GACvEzF,KAAK0F,YAAcF,CACvB,EAEA1B,EAAQ+B,YAAc,WAClB7F,KAAKuF,QAAQ,KAAM,OACnBvF,KAAKpG,YAAY+L,OAAOC,WAAW,KAC3B5F,KAAK8F,UAAU9F,KAAKqF,YAAYrF,KAAK8F,WAEjD,EAEAhC,EAAQiC,aAAe,SAAUxI,GAC7B,MAAM3D,YAAEA,GAAgBoG,KACxBA,KAAKgG,iBACDhG,KAAKiG,WAAarM,EAAYsM,mBAAmBC,SAAS5I,IAAOyC,KAAKoG,kBAAkB7I,EAChG,EAEAuG,EAAQsC,kBAAoB,SAAU7I,GAClC,MAAM3D,YAAEA,EAAWyM,SAAEA,EAAQC,WAAEA,GAAetG,MACxCuG,aAAEA,EAAYC,QAAEA,GAAY5M,EAAYuK,EAC9C,IAAKqC,IAAYF,IAAeC,EAAc,OAE9C,MAAMtE,EAASrI,EAAYsM,oBACrBhN,EAAEA,EAACC,EAAEA,GAAM8I,EACXwE,EAAQC,EAAatN,KAAK6I,GAC1B0E,EAASD,EAAarN,KAAK4I,GAE3BnJ,EAAQyE,EAAKrE,EAAIA,EAAIqN,EAAgBE,EAAQlJ,EAAKrE,GAAKqN,EAAe,EACtExN,EAAQwE,EAAKpE,EAAIA,EAAIoN,EAAgBI,EAASpJ,EAAKpE,GAAKoN,EAAe,EAC7E,IAAI7G,EAAS,EAAGC,EAAS,EAEzBK,KAAK4G,cAAgBC,YAAY,KAC7BnH,GAAU5G,EACV6G,GAAU5G,EAEV+D,EAAY9E,KAAKqO,EAAUvN,EAAOC,GAClC+D,EAAY9E,KAAKgI,KAAK8F,SAAUhN,EAAOC,GAEvCa,EAAY5B,KAAIyI,OAAAvF,OAAAuF,OAAAvF,OAAA,GAAMqC,GAAI,CAAEzE,QAAOC,QAAO2G,SAAQC,SAAQpG,SAAU,UACpEK,EAAYkN,gBAAgBvJ,IAC7B,GACP,EAEAuG,EAAQkC,eAAiB,WACjBhG,KAAK4G,gBACLG,cAAc/G,KAAK4G,eACnB5G,KAAK4G,cAAgB,EAE7B,EC7GAI,EAAOhJ,IAAI"}
|
package/dist/viewport.js
CHANGED
|
@@ -26,9 +26,14 @@ this.LeaferIN.viewport = function(exports, core) {
|
|
|
26
26
|
}), leafer.on_(core.MoveEvent.END, e => {
|
|
27
27
|
core.LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY));
|
|
28
28
|
}), leafer.on_(core.ZoomEvent.BEFORE_ZOOM, e => {
|
|
29
|
-
const {zoomLayer: zoomLayer} = leafer;
|
|
29
|
+
const {zoomLayer: zoomLayer, layouter: layouter} = leafer;
|
|
30
30
|
const changeScale = leafer.getValidScale(e.scale);
|
|
31
|
-
if (changeScale !== 1)
|
|
31
|
+
if (changeScale !== 1) {
|
|
32
|
+
layouter.stop();
|
|
33
|
+
core.LeafHelper.updateMatrix(leafer);
|
|
34
|
+
zoomLayer.scaleOfWorld(e, changeScale);
|
|
35
|
+
layouter.start();
|
|
36
|
+
}
|
|
32
37
|
}));
|
|
33
38
|
}
|
|
34
39
|
function addViewportConfig(leafer, mergeConfig) {
|
package/dist/viewport.min.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var t=require("@leafer-ui/core");function e(t){const{scroll:e,disabled:o}=t.app.config.move;return!e||o?"":!0===e?"free":e}function o(o,n,i){a(o.parentApp?o.parentApp:o,n),o.isApp||i||o.__eventIds.push(o.on_(t.MoveEvent.BEFORE_MOVE,t=>{const a=o.getValidMove(t.moveX,t.moveY,!1);if(e(o).includes("limit")){const e=o.getValidMove(0,0);if(e.x||e.y){const o=100,n=200,i="drag"===t.moveType?.3:.05;Math.abs(e.x)>o?a.x=0:a.x*=i,Math.abs(e.y)>n?a.y=0:a.y*=i}}o.zoomLayer.move(a)}),o.on_(t.MoveEvent.DRAG_ANIMATE,()=>{const t=o.getValidMove(0,0);(t.x||t.y)&&o.interaction.stopDragAnimate()}),o.on_(t.MoveEvent.END,e=>{t.LeafHelper.animateMove(o.zoomLayer,o.getValidMove(e.moveX,e.moveY))}),o.on_(t.ZoomEvent.BEFORE_ZOOM,
|
|
1
|
+
"use strict";var t=require("@leafer-ui/core");function e(t){const{scroll:e,disabled:o}=t.app.config.move;return!e||o?"":!0===e?"free":e}function o(o,n,i){a(o.parentApp?o.parentApp:o,n),o.isApp||i||o.__eventIds.push(o.on_(t.MoveEvent.BEFORE_MOVE,t=>{const a=o.getValidMove(t.moveX,t.moveY,!1);if(e(o).includes("limit")){const e=o.getValidMove(0,0);if(e.x||e.y){const o=100,n=200,i="drag"===t.moveType?.3:.05;Math.abs(e.x)>o?a.x=0:a.x*=i,Math.abs(e.y)>n?a.y=0:a.y*=i}}o.zoomLayer.move(a)}),o.on_(t.MoveEvent.DRAG_ANIMATE,()=>{const t=o.getValidMove(0,0);(t.x||t.y)&&o.interaction.stopDragAnimate()}),o.on_(t.MoveEvent.END,e=>{t.LeafHelper.animateMove(o.zoomLayer,o.getValidMove(e.moveX,e.moveY))}),o.on_(t.ZoomEvent.BEFORE_ZOOM,e=>{const{zoomLayer:a,layouter:n}=o,i=o.getValidScale(e.scale);1!==i&&(n.stop(),t.LeafHelper.updateMatrix(o),a.scaleOfWorld(e,i),n.start())}))}function a(e,o){const a={wheel:{preventDefault:!0},touch:{preventDefault:!0},pointer:{preventDefaultMenu:!0}};o&&t.DataHelper.assign(a,o),t.DataHelper.assign(e.config,a,e.userConfig)}const n=t.Debug.get("LeaferTypeCreator"),i={list:{},register(t,e){s[t]&&n.repeat(t),s[t]=e},run(t,e){const o=s[t];o&&o(e)}},{list:s,register:r}=i;r("viewport",o),r("custom",function(t){o(t,null,!0)}),r("design",function(t){o(t,{zoom:{min:.01,max:256},move:{holdSpaceKey:!0,holdMiddleKey:!0}})}),r("document",function(t){o(t,{zoom:{min:1},move:{scroll:"limit"}})});const c={state:{type:"none",typeCount:0,startTime:0,totalData:null,center:{}},getData(e){const o=e[0],a=e[1],n=t.PointHelper.getCenter(o.from,a.from),i=t.PointHelper.getCenter(o.to,a.to),s={x:i.x-n.x,y:i.y-n.y},r=t.PointHelper.getDistance(o.from,a.from);return{move:s,scale:t.PointHelper.getDistance(o.to,a.to)/r,rotation:t.PointHelper.getRotation(o.from,a.from,o.to,a.to),center:i}},getType(t,e){const o=Math.hypot(t.move.x,t.move.y)/(e.move||5),a=Math.abs(t.scale-1)/(e.scale||.03),n=Math.abs(t.rotation)/(e.rotation||2);return o<1&&a<1&&n<1?"none":o>=a&&o>=n?"move":a>=n?"zoom":"rotate"},detect(t,e){const{state:o}=m,a=m.getType(t,e);if(o.totalData||(o.startTime=Date.now(),o.center=t.center),m.add(t,o.totalData),o.totalData=t,a===o.type){if(o.typeCount++,o.typeCount>=(e.count||3)&&"none"!==a)return a}else o.type=a,o.typeCount=1;return Date.now()-o.startTime>=(e.time||160)?m.getType(o.totalData,e):"none"},add(e,o){o&&(t.PointHelper.move(e.move,o.move),e.scale*=o.scale,e.rotation+=o.rotation,e.center=o.center)},reset(){const{state:t}=m;t.type="none",t.typeCount=0,t.startTime=0,t.totalData=null}},m=c,{abs:l,max:h}=Math,{sign:u,within:v}=t.MathHelper,g={getMove(t,e){let{moveSpeed:o}=e,{deltaX:a,deltaY:n}=t;t.shiftKey&&!a&&(a=n,n=0);const i=l(a),s=l(n);return i>50&&(a=h(50,i/3)*u(a)),s>50&&(n=h(50,s/3)*u(n)),{x:-a*o*2,y:-n*o*2}},getScale(e,o){let a,n=1,{zoomMode:i,zoomSpeed:s}=o;const r=e.deltaY||e.deltaX;if(i?(a="mouse"===i||!e.deltaX&&(t.Platform.intWheelDeltaY?Math.abs(r)>17:Math.ceil(r)!==r),(e.shiftKey||e.metaKey||e.ctrlKey)&&(a=!0)):a=!e.shiftKey&&(e.metaKey||e.ctrlKey),a){s=v(s,0,1);const t=e.deltaY?o.delta.y:o.delta.x,a=v(1-l(r)/(4*t)*s,.5,2);n=r>0?a:1/a}return n}};let d,p,f,y;class D{get transforming(){return this.moving||this.zooming||this.rotating}get moving(){return!!this.moveData}get zooming(){return!!this.zoomData}get rotating(){return!!this.rotateData}constructor(t){this.interaction=t}move(e){const{interaction:o}=this;e.moveType||(e.moveType="move"),this.moveData||(this.setPath(e),d=0,p=0,this.moveData=Object.assign(Object.assign({},e),{moveX:0,moveY:0,totalX:d,totalY:p}),o.emit(t.MoveEvent.START,this.moveData)),e.path=this.moveData.path,e.totalX=d+=e.moveX,e.totalY=p+=e.moveY,o.emit(t.MoveEvent.BEFORE_MOVE,e),o.emit(t.MoveEvent.MOVE,e),this.transformEndWait()}zoom(e){const{interaction:o}=this;this.zoomData||(this.setPath(e),f=1,this.zoomData=Object.assign(Object.assign({},e),{scale:1,totalScale:f}),o.emit(t.ZoomEvent.START,this.zoomData)),e.path=this.zoomData.path,e.totalScale=f*=e.scale,o.emit(t.ZoomEvent.BEFORE_ZOOM,e),o.emit(t.ZoomEvent.ZOOM,e),this.transformEndWait()}rotate(e){const{interaction:o}=this;this.rotateData||(this.setPath(e),y=0,this.rotateData=Object.assign(Object.assign({},e),{rotation:0,totalRotation:y}),o.emit(t.RotateEvent.START,this.rotateData)),e.path=this.rotateData.path,e.totalRotation=y+=e.rotation,o.emit(t.RotateEvent.BEFORE_ROTATE,e),o.emit(t.RotateEvent.ROTATE,e),this.transformEndWait()}setPath(t){const{interaction:e}=this,{path:o}=e.selector.getByPoint(t,e.hitRadius);t.path=o,e.cancelHover()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout(()=>{this.transformEnd()},this.interaction.p.transformTime)}transformEnd(){const{interaction:e,moveData:o,zoomData:a,rotateData:n}=this;o&&e.emit(t.MoveEvent.END,Object.assign(Object.assign({},o),{totalX:d,totalY:p})),a&&e.emit(t.ZoomEvent.END,Object.assign(Object.assign({},a),{totalScale:f})),n&&e.emit(t.RotateEvent.END,Object.assign(Object.assign({},n),{totalRotation:y})),this.reset()}reset(){this.zoomData=this.moveData=this.rotateData=null}destroy(){this.reset()}}const M=t.Leafer.prototype,E=new t.Bounds,O=new t.Point;function b(t,e){return Object.assign(Object.assign({},e),{moveX:t.x,moveY:t.y})}function T(t,e){return Object.assign(Object.assign({},e),{scale:t})}M.initType=function(t){i.run(t,this)},M.getValidMove=function(o,a,n=!0){const{disabled:i,scrollSpread:s}=this.app.config.move;O.set(o,a);const r=e(this);return r&&(r.includes("x")?O.y=0:r.includes("y")?O.x=0:Math.abs(O.x)>Math.abs(O.y)?O.y=0:O.x=0,n&&r.includes("limit")&&(E.set(this.__world).addPoint(this.zoomLayer),s&&E.spread(s),t.DragBoundsHelper.getValidMove(E,this.canvas.bounds,"auto",O,!0),r.includes("x")?O.y=0:r.includes("y")&&(O.x=0))),{x:i?0:O.x,y:i?0:O.y}},M.getValidScale=function(t){const{scaleX:e}=this.zoomLayer.__,{min:o,max:a,disabled:n}=this.app.config.zoom,i=Math.abs(e*t);return o&&i<o?t=o/e:a&&i>a&&(t=a/e),n?1:t};const x=t.InteractionBase.prototype;x.createTransformer=function(){this.transformer=new D(this)},x.move=function(t){this.transformer.move(t)},x.zoom=function(t){this.transformer.zoom(t)},x.rotate=function(t){this.transformer.rotate(t)},x.transformEnd=function(){this.transformer.transformEnd()},x.wheel=function(e){const{wheel:o,pointer:a}=this.config,{posDeltaSpeed:n,negDeltaSpeed:i}=o;if(o.disabled)return;e.deltaX>0?n&&(e.deltaX*=n):i&&(e.deltaX*=i),e.deltaY>0?n&&(e.deltaY*=n):i&&(e.deltaY*=i);const s=o.getScale?o.getScale(e,o):g.getScale(e,o);if(1!==s)this.zoom(T(s,e));else{const n=o.getMove?o.getMove(e,o):g.getMove(e,o);a.snap&&t.PointHelper.round(n),this.move(b(n,e))}},x.multiTouch=function(e,o){const{disabled:a,singleGesture:n}=this.config.multiTouch;if(a)return;this.pointerWaitCancel();let i=c.getData(o),{moving:s,zooming:r,rotating:m}=this.transformer;if(n){if(!this.transformer.transforming){switch(c.detect(i,t.isObject(n)?n:{})){case"move":s=!0;break;case"zoom":r=!0;break;case"rotate":m=!0;break;default:return}c.reset()}s||(i.center=c.state.center)}else s=r=m=!0;var l,h;Object.assign(e,i.center),e.multiTouch=!0,m&&this.rotate((l=i.rotation,h=e,Object.assign(Object.assign({},h),{rotation:l}))),r&&this.zoom(T(i.scale,e)),s&&this.move(b(i.move,e))};const z=t.Dragger.prototype,{abs:R,min:j,max:H,hypot:P}=Math;z.checkDragEndAnimate=function(e){const{interaction:o}=this,a=this.canAnimate&&this.moving&&o.m.dragAnimate;if(a){const n=t.isNumber(a)?a:.95,i=.15,s=150;let r,c,m,l=0,h=0,u=0,v=0,g=3;const{dragDataList:d}=this,p=d.length;for(let t=p-1;t>=H(p-3,0)&&(m=d[t],!(m.time&&Date.now()-m.time>100));t--)r=g--,l+=m.moveX*r,h+=m.moveY*r,v+=r,c=P(m.moveX,m.moveY),c>u&&(u=c);if(v&&(l/=v,h/=v),u>8){const t=1.15+j((u-8)/17,1)*(1.6-1.15);l*=t,h*=t}const f=H(R(l),R(h));f>s&&(c=s/f,l*=c,h*=c);const y=()=>{if(l*=n,h*=n,e=Object.assign({},e),R(l)<i&&R(h)<i)return this.dragEndReal(e);t.PointHelper.move(e,l,h),this.drag(e),this.animate(y),o.emit(t.MoveEvent.DRAG_ANIMATE,e)};this.animate(y)}return a},z.animate=function(t,e){const o=t||this.animateWait;o&&this.interaction.target.nextRender(o,null,e),this.animateWait=t},z.stopAnimate=function(){this.animate(null,"off"),this.interaction.target.nextRender(()=>{this.dragData&&this.dragEndReal(this.dragData)})},z.checkDragOut=function(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)},z.autoMoveOnDragOut=function(e){const{interaction:o,downData:a,canDragOut:n}=this,{autoDistance:i,dragOut:s}=o.m;if(!s||!n||!i)return;const r=o.shrinkCanvasBounds,{x:c,y:m}=r,l=t.BoundsHelper.maxX(r),h=t.BoundsHelper.maxY(r),u=e.x<c?i:l<e.x?-i:0,v=e.y<m?i:h<e.y?-i:0;let g=0,d=0;this.autoMoveTimer=setInterval(()=>{g+=u,d+=v,t.PointHelper.move(a,u,v),t.PointHelper.move(this.dragData,u,v),o.move(Object.assign(Object.assign({},e),{moveX:u,moveY:v,totalX:g,totalY:d,moveType:"drag"})),o.pointerMoveReal(e)},10)},z.autoMoveCancel=function(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)},t.Plugin.add("viewport"),exports.LeaferTypeCreator=i,exports.MultiTouchHelper=c,exports.Transformer=D,exports.WheelEventHelper=g,exports.addViewport=o,exports.addViewportConfig=a;
|
|
2
2
|
//# sourceMappingURL=viewport.min.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.min.cjs","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) zoomLayer.scaleOfWorld(e, changeScale)\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","changeScale","getValidScale","scale","scaleOfWorld","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewport.min.cjs","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer, layouter } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) {\n layouter.stop()\n LeafHelper.updateMatrix(leafer) // 节省一次重复布局\n zoomLayer.scaleOfWorld(e, changeScale)\n layouter.start()\n }\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","layouter","changeScale","getValidScale","scale","stop","updateMatrix","scaleOfWorld","start","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"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"}
|
package/dist/viewport.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
this.LeaferIN=this.LeaferIN||{},this.LeaferIN.viewport=function(t,e){"use strict";function o(t){const{scroll:e,disabled:o}=t.app.config.move;return!e||o?"":!0===e?"free":e}function a(t,a,i){n(t.parentApp?t.parentApp:t,a),t.isApp||i||t.__eventIds.push(t.on_(e.MoveEvent.BEFORE_MOVE,e=>{const a=t.getValidMove(e.moveX,e.moveY,!1);if(o(t).includes("limit")){const o=t.getValidMove(0,0);if(o.x||o.y){const t=100,n=200,i="drag"===e.moveType?.3:.05;Math.abs(o.x)>t?a.x=0:a.x*=i,Math.abs(o.y)>n?a.y=0:a.y*=i}}t.zoomLayer.move(a)}),t.on_(e.MoveEvent.DRAG_ANIMATE,()=>{const e=t.getValidMove(0,0);(e.x||e.y)&&t.interaction.stopDragAnimate()}),t.on_(e.MoveEvent.END,o=>{e.LeafHelper.animateMove(t.zoomLayer,t.getValidMove(o.moveX,o.moveY))}),t.on_(e.ZoomEvent.BEFORE_ZOOM,
|
|
1
|
+
this.LeaferIN=this.LeaferIN||{},this.LeaferIN.viewport=function(t,e){"use strict";function o(t){const{scroll:e,disabled:o}=t.app.config.move;return!e||o?"":!0===e?"free":e}function a(t,a,i){n(t.parentApp?t.parentApp:t,a),t.isApp||i||t.__eventIds.push(t.on_(e.MoveEvent.BEFORE_MOVE,e=>{const a=t.getValidMove(e.moveX,e.moveY,!1);if(o(t).includes("limit")){const o=t.getValidMove(0,0);if(o.x||o.y){const t=100,n=200,i="drag"===e.moveType?.3:.05;Math.abs(o.x)>t?a.x=0:a.x*=i,Math.abs(o.y)>n?a.y=0:a.y*=i}}t.zoomLayer.move(a)}),t.on_(e.MoveEvent.DRAG_ANIMATE,()=>{const e=t.getValidMove(0,0);(e.x||e.y)&&t.interaction.stopDragAnimate()}),t.on_(e.MoveEvent.END,o=>{e.LeafHelper.animateMove(t.zoomLayer,t.getValidMove(o.moveX,o.moveY))}),t.on_(e.ZoomEvent.BEFORE_ZOOM,o=>{const{zoomLayer:a,layouter:n}=t,i=t.getValidScale(o.scale);1!==i&&(n.stop(),e.LeafHelper.updateMatrix(t),a.scaleOfWorld(o,i),n.start())}))}function n(t,o){const a={wheel:{preventDefault:!0},touch:{preventDefault:!0},pointer:{preventDefaultMenu:!0}};o&&e.DataHelper.assign(a,o),e.DataHelper.assign(t.config,a,t.userConfig)}const i=e.Debug.get("LeaferTypeCreator"),s={list:{},register(t,e){r[t]&&i.repeat(t),r[t]=e},run(t,e){const o=r[t];o&&o(e)}},{list:r,register:c}=s;c("viewport",a),c("custom",function(t){a(t,null,!0)}),c("design",function(t){a(t,{zoom:{min:.01,max:256},move:{holdSpaceKey:!0,holdMiddleKey:!0}})}),c("document",function(t){a(t,{zoom:{min:1},move:{scroll:"limit"}})});const m={state:{type:"none",typeCount:0,startTime:0,totalData:null,center:{}},getData(t){const o=t[0],a=t[1],n=e.PointHelper.getCenter(o.from,a.from),i=e.PointHelper.getCenter(o.to,a.to),s={x:i.x-n.x,y:i.y-n.y},r=e.PointHelper.getDistance(o.from,a.from);return{move:s,scale:e.PointHelper.getDistance(o.to,a.to)/r,rotation:e.PointHelper.getRotation(o.from,a.from,o.to,a.to),center:i}},getType(t,e){const o=Math.hypot(t.move.x,t.move.y)/(e.move||5),a=Math.abs(t.scale-1)/(e.scale||.03),n=Math.abs(t.rotation)/(e.rotation||2);return o<1&&a<1&&n<1?"none":o>=a&&o>=n?"move":a>=n?"zoom":"rotate"},detect(t,e){const{state:o}=l,a=l.getType(t,e);if(o.totalData||(o.startTime=Date.now(),o.center=t.center),l.add(t,o.totalData),o.totalData=t,a===o.type){if(o.typeCount++,o.typeCount>=(e.count||3)&&"none"!==a)return a}else o.type=a,o.typeCount=1;return Date.now()-o.startTime>=(e.time||160)?l.getType(o.totalData,e):"none"},add(t,o){o&&(e.PointHelper.move(t.move,o.move),t.scale*=o.scale,t.rotation+=o.rotation,t.center=o.center)},reset(){const{state:t}=l;t.type="none",t.typeCount=0,t.startTime=0,t.totalData=null}},l=m,{abs:h,max:u}=Math,{sign:v,within:g}=e.MathHelper,d={getMove(t,e){let{moveSpeed:o}=e,{deltaX:a,deltaY:n}=t;t.shiftKey&&!a&&(a=n,n=0);const i=h(a),s=h(n);return i>50&&(a=u(50,i/3)*v(a)),s>50&&(n=u(50,s/3)*v(n)),{x:-a*o*2,y:-n*o*2}},getScale(t,o){let a,n=1,{zoomMode:i,zoomSpeed:s}=o;const r=t.deltaY||t.deltaX;if(i?(a="mouse"===i||!t.deltaX&&(e.Platform.intWheelDeltaY?Math.abs(r)>17:Math.ceil(r)!==r),(t.shiftKey||t.metaKey||t.ctrlKey)&&(a=!0)):a=!t.shiftKey&&(t.metaKey||t.ctrlKey),a){s=g(s,0,1);const e=t.deltaY?o.delta.y:o.delta.x,a=g(1-h(r)/(4*e)*s,.5,2);n=r>0?a:1/a}return n}};let f,p,y,D;class M{get transforming(){return this.moving||this.zooming||this.rotating}get moving(){return!!this.moveData}get zooming(){return!!this.zoomData}get rotating(){return!!this.rotateData}constructor(t){this.interaction=t}move(t){const{interaction:o}=this;t.moveType||(t.moveType="move"),this.moveData||(this.setPath(t),f=0,p=0,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0,totalX:f,totalY:p}),o.emit(e.MoveEvent.START,this.moveData)),t.path=this.moveData.path,t.totalX=f+=t.moveX,t.totalY=p+=t.moveY,o.emit(e.MoveEvent.BEFORE_MOVE,t),o.emit(e.MoveEvent.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:o}=this;this.zoomData||(this.setPath(t),y=1,this.zoomData=Object.assign(Object.assign({},t),{scale:1,totalScale:y}),o.emit(e.ZoomEvent.START,this.zoomData)),t.path=this.zoomData.path,t.totalScale=y*=t.scale,o.emit(e.ZoomEvent.BEFORE_ZOOM,t),o.emit(e.ZoomEvent.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:o}=this;this.rotateData||(this.setPath(t),D=0,this.rotateData=Object.assign(Object.assign({},t),{rotation:0,totalRotation:D}),o.emit(e.RotateEvent.START,this.rotateData)),t.path=this.rotateData.path,t.totalRotation=D+=t.rotation,o.emit(e.RotateEvent.BEFORE_ROTATE,t),o.emit(e.RotateEvent.ROTATE,t),this.transformEndWait()}setPath(t){const{interaction:e}=this,{path:o}=e.selector.getByPoint(t,e.hitRadius);t.path=o,e.cancelHover()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout(()=>{this.transformEnd()},this.interaction.p.transformTime)}transformEnd(){const{interaction:t,moveData:o,zoomData:a,rotateData:n}=this;o&&t.emit(e.MoveEvent.END,Object.assign(Object.assign({},o),{totalX:f,totalY:p})),a&&t.emit(e.ZoomEvent.END,Object.assign(Object.assign({},a),{totalScale:y})),n&&t.emit(e.RotateEvent.END,Object.assign(Object.assign({},n),{totalRotation:D})),this.reset()}reset(){this.zoomData=this.moveData=this.rotateData=null}destroy(){this.reset()}}const E=e.Leafer.prototype,O=new e.Bounds,b=new e.Point;function T(t,e){return Object.assign(Object.assign({},e),{moveX:t.x,moveY:t.y})}function x(t,e){return Object.assign(Object.assign({},e),{scale:t})}E.initType=function(t){s.run(t,this)},E.getValidMove=function(t,a,n=!0){const{disabled:i,scrollSpread:s}=this.app.config.move;b.set(t,a);const r=o(this);return r&&(r.includes("x")?b.y=0:r.includes("y")?b.x=0:Math.abs(b.x)>Math.abs(b.y)?b.y=0:b.x=0,n&&r.includes("limit")&&(O.set(this.__world).addPoint(this.zoomLayer),s&&O.spread(s),e.DragBoundsHelper.getValidMove(O,this.canvas.bounds,"auto",b,!0),r.includes("x")?b.y=0:r.includes("y")&&(b.x=0))),{x:i?0:b.x,y:i?0:b.y}},E.getValidScale=function(t){const{scaleX:e}=this.zoomLayer.__,{min:o,max:a,disabled:n}=this.app.config.zoom,i=Math.abs(e*t);return o&&i<o?t=o/e:a&&i>a&&(t=a/e),n?1:t};const z=e.InteractionBase.prototype;z.createTransformer=function(){this.transformer=new M(this)},z.move=function(t){this.transformer.move(t)},z.zoom=function(t){this.transformer.zoom(t)},z.rotate=function(t){this.transformer.rotate(t)},z.transformEnd=function(){this.transformer.transformEnd()},z.wheel=function(t){const{wheel:o,pointer:a}=this.config,{posDeltaSpeed:n,negDeltaSpeed:i}=o;if(o.disabled)return;t.deltaX>0?n&&(t.deltaX*=n):i&&(t.deltaX*=i),t.deltaY>0?n&&(t.deltaY*=n):i&&(t.deltaY*=i);const s=o.getScale?o.getScale(t,o):d.getScale(t,o);if(1!==s)this.zoom(x(s,t));else{const n=o.getMove?o.getMove(t,o):d.getMove(t,o);a.snap&&e.PointHelper.round(n),this.move(T(n,t))}},z.multiTouch=function(t,o){const{disabled:a,singleGesture:n}=this.config.multiTouch;if(a)return;this.pointerWaitCancel();let i=m.getData(o),{moving:s,zooming:r,rotating:c}=this.transformer;if(n){if(!this.transformer.transforming){switch(m.detect(i,e.isObject(n)?n:{})){case"move":s=!0;break;case"zoom":r=!0;break;case"rotate":c=!0;break;default:return}m.reset()}s||(i.center=m.state.center)}else s=r=c=!0;var l,h;Object.assign(t,i.center),t.multiTouch=!0,c&&this.rotate((l=i.rotation,h=t,Object.assign(Object.assign({},h),{rotation:l}))),r&&this.zoom(x(i.scale,t)),s&&this.move(T(i.move,t))};const R=e.Dragger.prototype,{abs:j,min:H,max:P,hypot:X}=Math;return R.checkDragEndAnimate=function(t){const{interaction:o}=this,a=this.canAnimate&&this.moving&&o.m.dragAnimate;if(a){const n=e.isNumber(a)?a:.95,i=.15,s=150;let r,c,m,l=0,h=0,u=0,v=0,g=3;const{dragDataList:d}=this,f=d.length;for(let t=f-1;t>=P(f-3,0)&&(m=d[t],!(m.time&&Date.now()-m.time>100));t--)r=g--,l+=m.moveX*r,h+=m.moveY*r,v+=r,c=X(m.moveX,m.moveY),c>u&&(u=c);if(v&&(l/=v,h/=v),u>8){const t=1.15+H((u-8)/17,1)*(1.6-1.15);l*=t,h*=t}const p=P(j(l),j(h));p>s&&(c=s/p,l*=c,h*=c);const y=()=>{if(l*=n,h*=n,t=Object.assign({},t),j(l)<i&&j(h)<i)return this.dragEndReal(t);e.PointHelper.move(t,l,h),this.drag(t),this.animate(y),o.emit(e.MoveEvent.DRAG_ANIMATE,t)};this.animate(y)}return a},R.animate=function(t,e){const o=t||this.animateWait;o&&this.interaction.target.nextRender(o,null,e),this.animateWait=t},R.stopAnimate=function(){this.animate(null,"off"),this.interaction.target.nextRender(()=>{this.dragData&&this.dragEndReal(this.dragData)})},R.checkDragOut=function(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)},R.autoMoveOnDragOut=function(t){const{interaction:o,downData:a,canDragOut:n}=this,{autoDistance:i,dragOut:s}=o.m;if(!s||!n||!i)return;const r=o.shrinkCanvasBounds,{x:c,y:m}=r,l=e.BoundsHelper.maxX(r),h=e.BoundsHelper.maxY(r),u=t.x<c?i:l<t.x?-i:0,v=t.y<m?i:h<t.y?-i:0;let g=0,d=0;this.autoMoveTimer=setInterval(()=>{g+=u,d+=v,e.PointHelper.move(a,u,v),e.PointHelper.move(this.dragData,u,v),o.move(Object.assign(Object.assign({},t),{moveX:u,moveY:v,totalX:g,totalY:d,moveType:"drag"})),o.pointerMoveReal(t)},10)},R.autoMoveCancel=function(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)},e.Plugin.add("viewport"),t.LeaferTypeCreator=s,t.MultiTouchHelper=m,t.Transformer=M,t.WheelEventHelper=d,t.addViewport=a,t.addViewportConfig=n,t}({},LeaferUI);
|
|
2
2
|
//# sourceMappingURL=viewport.min.js.map
|
package/dist/viewport.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.min.js","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) zoomLayer.scaleOfWorld(e, changeScale)\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","changeScale","getValidScale","scale","scaleOfWorld","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewport.min.js","sources":["../../../../../../src/in/packages/viewport/src/helper.ts","../../../../../../src/in/packages/viewport/src/type/viewport.ts","../../../../../../src/in/packages/viewport/src/LeaferTypeCreator.ts","../../../../../../src/in/packages/viewport/src/type/custom.ts","../../../../../../src/in/packages/viewport/src/type/design.ts","../../../../../../src/in/packages/viewport/src/type/document.ts","../../../../../../src/in/packages/viewport/src/interaction/MultiTouchHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/WheelEventHelper.ts","../../../../../../src/in/packages/viewport/src/interaction/Transformer.ts","../../../../../../src/in/packages/viewport/src/Leafer.ts","../../../../../../src/in/packages/viewport/src/interaction/Interaction.ts","../../../../../../src/in/packages/viewport/src/interaction/Dragger.ts","../../../../../../src/in/packages/viewport/src/index.ts"],"sourcesContent":["import { ILeaferBase } from '@leafer-ui/interface'\n\n\nexport function getScrollType(leafer: ILeaferBase): string {\n const { scroll, disabled } = leafer.app.config.move\n return (!scroll || disabled) ? '' : (scroll === true ? 'free' : scroll)\n}","import { ILeaferBase, ILeaferConfig } from '@leafer-ui/interface'\n\nimport { MoveEvent, ZoomEvent, DataHelper, LeafHelper } from '@leafer-ui/core'\n\nimport { getScrollType } from '../helper'\n\n\nexport function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, custom?: boolean): void {\n addViewportConfig(leafer.parentApp ? leafer.parentApp : leafer, mergeConfig)\n if (leafer.isApp || custom) return\n\n leafer.__eventIds.push(\n leafer.on_(MoveEvent.BEFORE_MOVE, (e: MoveEvent) => {\n const move = leafer.getValidMove(e.moveX, e.moveY, false)\n\n // check limit\n if (getScrollType(leafer).includes('limit')) {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) {\n const maxX = 100, maxY = 200, resistance = e.moveType === 'drag' ? 0.3 : 0.05\n\n if (Math.abs(testMove.x) > maxX) move.x = 0\n else move.x *= resistance\n\n if (Math.abs(testMove.y) > maxY) move.y = 0\n else move.y *= resistance\n }\n }\n\n leafer.zoomLayer.move(move)\n }),\n leafer.on_(MoveEvent.DRAG_ANIMATE, () => {\n const testMove = leafer.getValidMove(0, 0)\n if (testMove.x || testMove.y) leafer.interaction.stopDragAnimate()\n }),\n leafer.on_(MoveEvent.END, (e: MoveEvent) => {\n LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))\n }),\n leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {\n const { zoomLayer, layouter } = leafer\n const changeScale = leafer.getValidScale(e.scale)\n if (changeScale !== 1) {\n layouter.stop()\n LeafHelper.updateMatrix(leafer) // 节省一次重复布局\n zoomLayer.scaleOfWorld(e, changeScale)\n layouter.start()\n }\n })\n )\n}\n\nexport function addViewportConfig(leafer: ILeaferBase, mergeConfig?: ILeaferConfig): void {\n const viewportConfig: ILeaferConfig = {\n wheel: { preventDefault: true },\n touch: { preventDefault: true },\n pointer: { preventDefaultMenu: true }\n }\n if (mergeConfig) DataHelper.assign(viewportConfig, mergeConfig)\n DataHelper.assign(leafer.config, viewportConfig, leafer.userConfig)\n}","import { ILeaferBase, ILeaferTypeList, ILeaferTypeFunction } from '@leafer-ui/interface'\n\nimport { Debug } from '@leafer-ui/core'\n\nimport { addViewport } from './type/viewport'\nimport { custom } from './type/custom'\nimport { design } from './type/design'\nimport { document } from './type/document'\n\n\nconst debug = Debug.get('LeaferTypeCreator')\n\nexport const LeaferTypeCreator = {\n\n list: {} as ILeaferTypeList,\n\n register(name: string, fn: ILeaferTypeFunction): void {\n list[name] && debug.repeat(name)\n list[name] = fn\n },\n\n run(name: string, leafer: ILeaferBase): void {\n const fn = list[name]\n fn && fn(leafer)\n }\n\n}\n\nconst { list, register } = LeaferTypeCreator\n\nregister('viewport', addViewport)\nregister('custom', custom)\nregister('design', design)\nregister('document', document)","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function custom(leafer: ILeaferBase): void {\n addViewport(leafer, null, true)\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function design(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: {\n min: 0.01,\n max: 256\n },\n move: {\n holdSpaceKey: true,\n holdMiddleKey: true,\n }\n })\n}\n","import { ILeaferBase } from '@leafer-ui/interface'\n\nimport { addViewport } from './viewport'\n\n\nexport function document(leafer: ILeaferBase): void {\n addViewport(leafer, {\n zoom: { min: 1 },\n move: { scroll: 'limit' }\n })\n}\n","import { IMultiTouchData, IKeepTouchData, IGestureType, IPointData, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { PointHelper } from '@leafer-ui/core'\n\n\nexport const MultiTouchHelper = {\n\n state: { // 单一手势识别状态\n type: 'none' as IGestureType,\n typeCount: 0,\n startTime: 0,\n totalData: null as IMultiTouchData,\n center: {} as IPointData\n },\n\n getData(list: IKeepTouchData[]): IMultiTouchData {\n const a = list[0], b = list[1]\n const lastCenter = PointHelper.getCenter(a.from, b.from)\n const center = PointHelper.getCenter(a.to, b.to)\n const move = { x: center.x - lastCenter.x, y: center.y - lastCenter.y }\n\n const lastDistance = PointHelper.getDistance(a.from, b.from)\n const distance = PointHelper.getDistance(a.to, b.to)\n const scale = distance / lastDistance\n\n const rotation = PointHelper.getRotation(a.from, b.from, a.to, b.to)\n return { move, scale, rotation, center }\n },\n\n getType(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const moveScore = Math.hypot(data.move.x, data.move.y) / (config.move || 5)\n const scaleScore = Math.abs(data.scale - 1) / (config.scale || 0.03)\n const rotateScore = Math.abs(data.rotation) / (config.rotation || 2)\n\n if (moveScore < 1 && scaleScore < 1 && rotateScore < 1) return 'none'\n if (moveScore >= scaleScore && moveScore >= rotateScore) return 'move'\n if (scaleScore >= rotateScore) return 'zoom'\n return 'rotate'\n },\n\n // 识别单一手势\n detect(data: IMultiTouchData, config: ISingleGestureConfig): IGestureType {\n const { state } = M\n const type = M.getType(data, config)\n\n if (!state.totalData) {\n state.startTime = Date.now()\n state.center = data.center\n }\n\n M.add(data, state.totalData)\n state.totalData = data\n\n if (type === state.type) { // 连续多帧一样的类型才进行锁定\n state.typeCount++\n if (state.typeCount >= (config.count || 3) && type !== 'none') return type\n } else {\n state.type = type\n state.typeCount = 1\n }\n\n if ((Date.now() - state.startTime) >= (config.time || 160)) return M.getType(state.totalData, config) // 限制最长识别时间\n\n return 'none'\n },\n\n add(data: IMultiTouchData, add: IMultiTouchData): void {\n if (!add) return\n PointHelper.move(data.move, add.move)\n data.scale *= add.scale\n data.rotation += add.rotation\n data.center = add.center\n },\n\n reset() {\n const { state } = M\n state.type = 'none'\n state.typeCount = 0\n state.startTime = 0\n state.totalData = null\n }\n\n}\n\nconst M = MultiTouchHelper","import { IPointData, IWheelEvent, IWheelConfig } from '@leafer-ui/interface'\n\nimport { MathHelper, Platform } from '@leafer-ui/core'\n\n\nconst { abs, max } = Math, { sign, within } = MathHelper\n\nexport const WheelEventHelper = {\n\n getMove(event: IWheelEvent, config: IWheelConfig): IPointData {\n let { moveSpeed } = config\n let { deltaX, deltaY } = event\n if (event.shiftKey && !deltaX) { // Window\n deltaX = deltaY\n deltaY = 0\n }\n const absX = abs(deltaX), absY = abs(deltaY)\n if (absX > 50) deltaX = max(50, absX / 3) * sign(deltaX)\n if (absY > 50) deltaY = max(50, absY / 3) * sign(deltaY)\n return { x: -deltaX * moveSpeed * 2, y: -deltaY * moveSpeed * 2 }\n },\n\n getScale(event: IWheelEvent, config: IWheelConfig): number {\n\n let zoom: boolean\n let scale = 1\n let { zoomMode, zoomSpeed } = config\n\n const delta = event.deltaY || event.deltaX\n\n if (zoomMode) {\n // mac 触摸板滚动手势的deltaY是整数, 鼠标滚动/触摸板缩放的deltaY有小数点, firfox鼠标滚动为整数,为18或19的倍数\n // windows 始终是整数\n zoom = (zoomMode === 'mouse') ? true : (!event.deltaX && (Platform.intWheelDeltaY ? Math.abs(delta) > 17 : Math.ceil(delta) !== delta))\n if (event.shiftKey || event.metaKey || event.ctrlKey) zoom = true\n } else {\n zoom = !event.shiftKey && (event.metaKey || event.ctrlKey)\n }\n\n if (zoom) {\n zoomSpeed = within(zoomSpeed, 0, 1)\n const min = event.deltaY ? config.delta.y : config.delta.x\n const absScale = within(1 - abs(delta) / (min * 4) * zoomSpeed, 0.5, 2)\n scale = delta > 0 ? absScale : 1 / absScale // 让 scale 放大、缩小可以定位在有规律的刻度上\n }\n\n return scale\n }\n\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, ITimer } from '@leafer-ui/interface'\n\nimport { InteractionBase, MoveEvent, ZoomEvent, RotateEvent } from '@leafer-ui/core'\n\n\nlet totalX: number, totalY: number, totalScale: number, totalRotation: number\n\nexport class Transformer {\n\n public get transforming(): boolean { return this.moving || this.zooming || this.rotating }\n public get moving(): boolean { return !!this.moveData }\n public get zooming(): boolean { return !!this.zoomData }\n public get rotating(): boolean { return !!this.rotateData }\n\n public moveData: IMoveEvent\n public zoomData: IZoomEvent\n public rotateData: IRotateEvent\n\n protected interaction: InteractionBase\n protected transformTimer: ITimer\n\n constructor(interaction: InteractionBase) {\n this.interaction = interaction\n }\n\n public move(data: IMoveEvent): void {\n const { interaction } = this\n if (!data.moveType) data.moveType = 'move'\n\n if (!this.moveData) {\n this.setPath(data)\n totalX = 0, totalY = 0\n this.moveData = { ...data, moveX: 0, moveY: 0, totalX, totalY }\n interaction.emit(MoveEvent.START, this.moveData)\n }\n\n data.path = this.moveData.path\n data.totalX = totalX = totalX + data.moveX\n data.totalY = totalY = totalY + data.moveY\n interaction.emit(MoveEvent.BEFORE_MOVE, data)\n interaction.emit(MoveEvent.MOVE, data)\n\n this.transformEndWait()\n }\n\n public zoom(data: IZoomEvent): void {\n const { interaction } = this\n\n if (!this.zoomData) {\n this.setPath(data)\n totalScale = 1\n this.zoomData = { ...data, scale: 1, totalScale }\n interaction.emit(ZoomEvent.START, this.zoomData)\n }\n\n data.path = this.zoomData.path\n data.totalScale = totalScale = totalScale * data.scale\n interaction.emit(ZoomEvent.BEFORE_ZOOM, data)\n interaction.emit(ZoomEvent.ZOOM, data)\n\n this.transformEndWait()\n }\n\n public rotate(data: IRotateEvent): void {\n const { interaction } = this\n\n if (!this.rotateData) {\n this.setPath(data)\n totalRotation = 0\n this.rotateData = { ...data, rotation: 0, totalRotation }\n interaction.emit(RotateEvent.START, this.rotateData)\n }\n\n data.path = this.rotateData.path\n data.totalRotation = totalRotation = totalRotation + data.rotation\n interaction.emit(RotateEvent.BEFORE_ROTATE, data)\n interaction.emit(RotateEvent.ROTATE, data)\n\n this.transformEndWait()\n }\n\n public setPath(data: any): void {\n const { interaction } = this\n const { path } = interaction.selector.getByPoint(data, interaction.hitRadius)\n data.path = path\n interaction.cancelHover()\n }\n\n protected transformEndWait(): void {\n clearTimeout(this.transformTimer)\n this.transformTimer = setTimeout(() => {\n this.transformEnd()\n }, this.interaction.p.transformTime)\n }\n\n public transformEnd(): void {\n const { interaction, moveData, zoomData, rotateData } = this\n if (moveData) interaction.emit(MoveEvent.END, { ...moveData, totalX, totalY } as IMoveEvent)\n if (zoomData) interaction.emit(ZoomEvent.END, { ...zoomData, totalScale } as IZoomEvent)\n if (rotateData) interaction.emit(RotateEvent.END, { ...rotateData, totalRotation } as IRotateEvent)\n this.reset()\n }\n\n public reset(): void {\n this.zoomData = this.moveData = this.rotateData = null\n }\n\n public destroy(): void {\n this.reset()\n }\n}","import { ILeaferType, IPointData } from '@leafer-ui/interface'\n\nimport { Leafer, Bounds, Point, DragBoundsHelper } from '@leafer-ui/core'\n\nimport { LeaferTypeCreator } from './LeaferTypeCreator'\nimport { getScrollType } from './helper'\n\n\nconst leafer = Leafer.prototype\nconst bounds = new Bounds(), move = new Point()\n\nleafer.initType = function (type: ILeaferType) {\n LeaferTypeCreator.run(type, this)\n}\n\nleafer.getValidMove = function (moveX: number, moveY: number, checkLimit = true): IPointData {\n const { disabled, scrollSpread } = this.app.config.move\n move.set(moveX, moveY)\n\n const scrollType = getScrollType(this)\n if (scrollType) {\n\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n else Math.abs(move.x) > Math.abs(move.y) ? move.y = 0 : move.x = 0\n\n if (checkLimit && scrollType.includes('limit')) {\n bounds.set(this.__world).addPoint(this.zoomLayer as IPointData)\n if (scrollSpread) bounds.spread(scrollSpread)\n DragBoundsHelper.getValidMove(bounds, this.canvas.bounds, 'auto', move, true)\n if (scrollType.includes('x')) move.y = 0\n else if (scrollType.includes('y')) move.x = 0\n }\n }\n\n return { x: disabled ? 0 : move.x, y: disabled ? 0 : move.y }\n}\n\nleafer.getValidScale = function (changeScale: number): number {\n const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale)\n if (min && absScale < min) changeScale = min / scaleX\n else if (max && absScale > max) changeScale = max / scaleX\n return disabled ? 1 : changeScale // fix 不能过滤小数位\n}","import { IMoveEvent, IZoomEvent, IRotateEvent, IWheelEvent, IKeepTouchData, IPointData, IEvent, IPointerEvent, ISingleGestureConfig } from '@leafer-ui/interface'\n\nimport { InteractionBase, PointHelper, isObject } from '@leafer-ui/core'\n\nimport { WheelEventHelper } from './WheelEventHelper'\nimport { Transformer } from './Transformer'\nimport { MultiTouchHelper } from './MultiTouchHelper'\n\n\nfunction getMoveEventData(move: IPointData, event: IEvent): IMoveEvent {\n return { ...event, moveX: move.x, moveY: move.y } as IMoveEvent\n}\n\nfunction getRotateEventData(rotation: number, event: IEvent): IRotateEvent {\n return { ...event, rotation } as IRotateEvent\n}\n\nfunction getZoomEventData(scale: number, event: IEvent): IZoomEvent {\n return { ...event, scale, } as IZoomEvent\n}\n\n\nconst interaction = InteractionBase.prototype\n\ninteraction.createTransformer = function (): void {\n this.transformer = new Transformer(this)\n}\n\ninteraction.move = function (data: IMoveEvent): void {\n this.transformer.move(data)\n}\n\ninteraction.zoom = function (data: IZoomEvent): void {\n this.transformer.zoom(data)\n}\n\ninteraction.rotate = function (data: IRotateEvent): void {\n this.transformer.rotate(data)\n}\n\ninteraction.transformEnd = function (): void {\n this.transformer.transformEnd()\n}\n\n\ninteraction.wheel = function (data: IWheelEvent): void {\n const { wheel, pointer } = this.config, { posDeltaSpeed, negDeltaSpeed } = wheel\n if (wheel.disabled) return\n\n if (data.deltaX > 0) posDeltaSpeed && (data.deltaX *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaX *= negDeltaSpeed)\n\n if (data.deltaY > 0) posDeltaSpeed && (data.deltaY *= posDeltaSpeed)\n else negDeltaSpeed && (data.deltaY *= negDeltaSpeed)\n\n const scale = wheel.getScale ? wheel.getScale(data, wheel) : WheelEventHelper.getScale(data, wheel)\n if (scale !== 1) this.zoom(getZoomEventData(scale, data))\n else {\n const move = wheel.getMove ? wheel.getMove(data, wheel) : WheelEventHelper.getMove(data, wheel)\n if (pointer.snap) PointHelper.round(move)\n this.move(getMoveEventData(move, data))\n }\n}\n\n\ninteraction.multiTouch = function (data: IPointerEvent, list: IKeepTouchData[]): void {\n const { disabled, singleGesture } = this.config.multiTouch\n if (disabled) return\n this.pointerWaitCancel()\n\n let gestureData = MultiTouchHelper.getData(list)\n let { moving, zooming, rotating } = this.transformer\n\n if (singleGesture) {\n\n if (!this.transformer.transforming) {\n\n const type = MultiTouchHelper.detect(gestureData, isObject(singleGesture) ? singleGesture : {} as ISingleGestureConfig)\n\n switch (type) {\n case 'move': moving = true; break\n case 'zoom': zooming = true; break\n case 'rotate': rotating = true; break\n default: return\n }\n\n MultiTouchHelper.reset()\n\n }\n\n if (!moving) gestureData.center = MultiTouchHelper.state.center\n\n } else moving = zooming = rotating = true\n\n Object.assign(data, gestureData.center)\n data.multiTouch = true\n\n if (rotating) this.rotate(getRotateEventData(gestureData.rotation, data))\n if (zooming) this.zoom(getZoomEventData(gestureData.scale, data))\n if (moving) this.move(getMoveEventData(gestureData.move, data))\n}","import { IPointerEvent, IFunction, IDragEvent } from '@leafer-ui/interface'\n\nimport { Dragger, BoundsHelper, PointHelper, MoveEvent, isNumber } from '@leafer-ui/core'\n\n\nconst dragger = Dragger.prototype\nconst { abs, min, max, hypot } = Math\n\ndragger.checkDragEndAnimate = function (data: IPointerEvent): boolean | number {\n const { interaction } = this\n const dragAnimate = this.canAnimate && this.moving && interaction.m.dragAnimate\n\n if (dragAnimate) {\n\n const inertia = isNumber(dragAnimate) ? dragAnimate : 0.95\n const stopMove = 0.15\n const maxMove = 150\n\n let moveX = 0, moveY = 0, flickSpeed = 0 // 快速滑动加速\n let totalWeight = 0, weight: number, w = 3, s: number, frame: IDragEvent\n\n const { dragDataList } = this, len = dragDataList.length\n for (let i = len - 1; i >= max(len - 3, 0); i--) {\n frame = dragDataList[i]\n if (frame.time && (Date.now() - frame.time > 100)) break\n weight = w--\n\n moveX += frame.moveX * weight\n moveY += frame.moveY * weight\n totalWeight += weight\n\n s = hypot(frame.moveX, frame.moveY)\n if (s > flickSpeed) flickSpeed = s\n }\n\n if (totalWeight) moveX /= totalWeight, moveY /= totalWeight\n\n if (flickSpeed > 8) {\n const t = min((flickSpeed - 8) / 17, 1)\n const boost = 1.15 + t * (1.6 - 1.15)\n moveX *= boost\n moveY *= boost\n }\n\n const maxAbs = max(abs(moveX), abs(moveY))\n if (maxAbs > maxMove) {\n s = maxMove / maxAbs\n moveX *= s\n moveY *= s\n }\n\n const step = () => {\n moveX *= inertia\n moveY *= inertia\n\n data = { ...data }\n if (abs(moveX) < stopMove && abs(moveY) < stopMove) return this.dragEndReal(data)\n\n PointHelper.move(data, moveX, moveY)\n this.drag(data)\n\n this.animate(step)\n interaction.emit(MoveEvent.DRAG_ANIMATE, data)\n }\n\n this.animate(step)\n }\n\n return dragAnimate\n}\n\ndragger.animate = function (func?: IFunction, off?: 'off'): void { // dragEnd animation\n const animateWait = func || this.animateWait\n if (animateWait) this.interaction.target.nextRender(animateWait, null, off)\n this.animateWait = func\n}\n\ndragger.stopAnimate = function (): void {\n this.animate(null, 'off')\n this.interaction.target.nextRender(() => {\n if (this.dragData) this.dragEndReal(this.dragData)\n })\n}\n\ndragger.checkDragOut = function (data: IPointerEvent): void {\n const { interaction } = this\n this.autoMoveCancel()\n if (this.dragging && !interaction.shrinkCanvasBounds.hitPoint(data)) this.autoMoveOnDragOut(data)\n}\n\ndragger.autoMoveOnDragOut = function (data: IPointerEvent): void {\n const { interaction, downData, canDragOut } = this\n const { autoDistance, dragOut } = interaction.m\n if (!dragOut || !canDragOut || !autoDistance) return\n\n const bounds = interaction.shrinkCanvasBounds\n const { x, y } = bounds\n const right = BoundsHelper.maxX(bounds)\n const bottom = BoundsHelper.maxY(bounds)\n\n const moveX = data.x < x ? autoDistance : (right < data.x ? -autoDistance : 0)\n const moveY = data.y < y ? autoDistance : (bottom < data.y ? -autoDistance : 0)\n let totalX = 0, totalY = 0\n\n this.autoMoveTimer = setInterval(() => {\n totalX += moveX\n totalY += moveY\n\n PointHelper.move(downData, moveX, moveY)\n PointHelper.move(this.dragData, moveX, moveY)\n\n interaction.move({ ...data, moveX, moveY, totalX, totalY, moveType: 'drag' })\n interaction.pointerMoveReal(data)\n }, 10)\n}\n\ndragger.autoMoveCancel = function (): void {\n if (this.autoMoveTimer) {\n clearInterval(this.autoMoveTimer)\n this.autoMoveTimer = 0\n }\n}","export { LeaferTypeCreator } from './LeaferTypeCreator'\nexport { addViewport, addViewportConfig } from './type/viewport'\nexport { MultiTouchHelper } from './interaction/MultiTouchHelper'\nexport { WheelEventHelper } from './interaction/WheelEventHelper'\nexport { Transformer } from './interaction/Transformer'\n\nimport { Plugin } from '@leafer-ui/core'\n\nimport './Leafer'\nimport './interaction/Interaction'\nimport './interaction/Dragger'\n\nPlugin.add('viewport')"],"names":["getScrollType","leafer","scroll","disabled","app","config","move","addViewport","mergeConfig","custom","addViewportConfig","parentApp","isApp","__eventIds","push","on_","MoveEvent","BEFORE_MOVE","e","getValidMove","moveX","moveY","includes","testMove","x","y","maxX","maxY","resistance","moveType","Math","abs","zoomLayer","DRAG_ANIMATE","interaction","stopDragAnimate","END","LeafHelper","animateMove","ZoomEvent","BEFORE_ZOOM","layouter","changeScale","getValidScale","scale","stop","updateMatrix","scaleOfWorld","start","viewportConfig","wheel","preventDefault","touch","pointer","preventDefaultMenu","DataHelper","assign","userConfig","debug","Debug","get","LeaferTypeCreator","list","register","name","fn","repeat","run","zoom","min","max","holdSpaceKey","holdMiddleKey","MultiTouchHelper","state","type","typeCount","startTime","totalData","center","getData","a","b","lastCenter","PointHelper","getCenter","from","to","lastDistance","getDistance","rotation","getRotation","getType","data","moveScore","hypot","scaleScore","rotateScore","detect","M","Date","now","add","count","time","reset","sign","within","MathHelper","WheelEventHelper","getMove","event","moveSpeed","deltaX","deltaY","shiftKey","absX","absY","getScale","zoomMode","zoomSpeed","delta","Platform","intWheelDeltaY","ceil","metaKey","ctrlKey","absScale","totalX","totalY","totalScale","totalRotation","Transformer","transforming","this","moving","zooming","rotating","moveData","zoomData","rotateData","constructor","setPath","Object","emit","START","path","MOVE","transformEndWait","ZOOM","rotate","RotateEvent","BEFORE_ROTATE","ROTATE","selector","getByPoint","hitRadius","cancelHover","clearTimeout","transformTimer","setTimeout","transformEnd","p","transformTime","destroy","Leafer","prototype","bounds","Bounds","Point","getMoveEventData","getZoomEventData","initType","checkLimit","scrollSpread","set","scrollType","__world","addPoint","spread","DragBoundsHelper","canvas","scaleX","__","InteractionBase","createTransformer","transformer","posDeltaSpeed","negDeltaSpeed","snap","round","multiTouch","singleGesture","pointerWaitCancel","gestureData","isObject","dragger","Dragger","checkDragEndAnimate","dragAnimate","canAnimate","m","inertia","isNumber","stopMove","maxMove","weight","s","frame","flickSpeed","totalWeight","w","dragDataList","len","length","i","boost","maxAbs","step","dragEndReal","drag","animate","func","off","animateWait","target","nextRender","stopAnimate","dragData","checkDragOut","autoMoveCancel","dragging","shrinkCanvasBounds","hitPoint","autoMoveOnDragOut","downData","canDragOut","autoDistance","dragOut","right","BoundsHelper","bottom","autoMoveTimer","setInterval","pointerMoveReal","clearInterval","Plugin"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leafer-in/viewport",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "@leafer-in/viewport",
|
|
5
5
|
"author": "Chao (Leafer) Wan",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"leaferjs"
|
|
35
35
|
],
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@leafer-ui/core": "^2.0.
|
|
38
|
-
"@leafer-ui/interface": "^2.0.
|
|
39
|
-
"@leafer-in/interface": "^2.0.
|
|
37
|
+
"@leafer-ui/core": "^2.0.2",
|
|
38
|
+
"@leafer-ui/interface": "^2.0.2",
|
|
39
|
+
"@leafer-in/interface": "^2.0.2"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/src/type/viewport.ts
CHANGED
|
@@ -37,9 +37,14 @@ export function addViewport(leafer: ILeaferBase, mergeConfig?: ILeaferConfig, cu
|
|
|
37
37
|
LeafHelper.animateMove(leafer.zoomLayer, leafer.getValidMove(e.moveX, e.moveY))
|
|
38
38
|
}),
|
|
39
39
|
leafer.on_(ZoomEvent.BEFORE_ZOOM, (e: ZoomEvent) => {
|
|
40
|
-
const { zoomLayer } = leafer
|
|
40
|
+
const { zoomLayer, layouter } = leafer
|
|
41
41
|
const changeScale = leafer.getValidScale(e.scale)
|
|
42
|
-
if (changeScale !== 1)
|
|
42
|
+
if (changeScale !== 1) {
|
|
43
|
+
layouter.stop()
|
|
44
|
+
LeafHelper.updateMatrix(leafer) // 节省一次重复布局
|
|
45
|
+
zoomLayer.scaleOfWorld(e, changeScale)
|
|
46
|
+
layouter.start()
|
|
47
|
+
}
|
|
43
48
|
})
|
|
44
49
|
)
|
|
45
50
|
}
|