@@ -206,6 +206,9 @@ export default {
206206 const keepRatio = ( ratio && ( parentKeepRatio != null ? parentKeepRatio : props . keepRatio ) ) || false ;
207207 const state = moveable . state ;
208208
209+ let tempStartX = startValue [ 0 ] ;
210+ let tempStartY = startValue [ 1 ] ;
211+
209212 function getNextScale ( ) {
210213 const {
211214 distWidth,
@@ -216,8 +219,14 @@ export default {
216219 let scaleX = startOffsetWidth ? ( startOffsetWidth + distWidth ) / startOffsetWidth : 1 ;
217220 let scaleY = startOffsetHeight ? ( startOffsetHeight + distHeight ) / startOffsetHeight : 1 ;
218221
219- scaleX = sizeDirection [ 0 ] || keepRatio ? scaleX * startValue [ 0 ] : startValue [ 0 ] ;
220- scaleY = sizeDirection [ 1 ] || keepRatio ? scaleY * startValue [ 1 ] : startValue [ 1 ] ;
222+ if ( ! startValue [ 0 ] ) {
223+ tempStartX = distWidth / startOffsetWidth ;
224+ }
225+ if ( ! startValue [ 1 ] ) {
226+ tempStartY = distHeight / startOffsetHeight ;
227+ }
228+ scaleX = ( sizeDirection [ 0 ] || keepRatio ? scaleX : 1 ) * tempStartX ;
229+ scaleY = ( sizeDirection [ 1 ] || keepRatio ? scaleY : 1 ) * tempStartY ;
221230
222231 if ( scaleX === 0 ) {
223232 scaleX = ( prevDist [ 0 ] > 0 ? 1 : - 1 ) * MIN_SCALE ;
@@ -254,7 +263,10 @@ export default {
254263 } ,
255264 } , true ) ) ;
256265
257- const dist = [ scale [ 0 ] / startValue [ 0 ] , scale [ 1 ] / startValue [ 1 ] ] ;
266+ const dist = [
267+ scale [ 0 ] / tempStartX ,
268+ scale [ 1 ] / tempStartY ,
269+ ] ;
258270 let fixedPosition = dragClient ;
259271 let snapDist = [ 0 , 0 ] ;
260272
@@ -294,9 +306,9 @@ export default {
294306
295307 if ( isNoSnap ) {
296308 if ( isWidth ) {
297- dist [ 0 ] = throttle ( dist [ 0 ] * startValue [ 0 ] , throttleScale ! ) / startValue [ 0 ] ;
309+ dist [ 0 ] = throttle ( dist [ 0 ] * tempStartX , throttleScale ! ) / tempStartX ;
298310 } else {
299- dist [ 1 ] = throttle ( dist [ 1 ] * startValue [ 1 ] , throttleScale ! ) / startValue [ 1 ] ;
311+ dist [ 1 ] = throttle ( dist [ 1 ] * tempStartY , throttleScale ! ) / tempStartY ;
300312 }
301313 }
302314 if (
@@ -305,27 +317,27 @@ export default {
305317 || ( isNoSnap && isWidth )
306318 ) {
307319 dist [ 0 ] += snapDist [ 0 ] ;
308- const snapHeight = startOffsetWidth * dist [ 0 ] * startValue [ 0 ] / ratio ;
320+ const snapHeight = startOffsetWidth * dist [ 0 ] * tempStartX / ratio ;
309321
310- dist [ 1 ] = snapHeight / startOffsetHeight / startValue [ 1 ] ;
322+ dist [ 1 ] = snapHeight / startOffsetHeight / tempStartY ;
311323 } else if (
312324 ( ! sizeDirection [ 0 ] && sizeDirection [ 1 ] )
313325 || ( ! snapDist [ 0 ] && snapDist [ 1 ] )
314326 || ( isNoSnap && ! isWidth )
315327 ) {
316328 dist [ 1 ] += snapDist [ 1 ] ;
317- const snapWidth = startOffsetHeight * dist [ 1 ] * startValue [ 1 ] * ratio ;
329+ const snapWidth = startOffsetHeight * dist [ 1 ] * tempStartY * ratio ;
318330
319- dist [ 0 ] = snapWidth / startOffsetWidth / startValue [ 0 ] ;
331+ dist [ 0 ] = snapWidth / startOffsetWidth / tempStartX ;
320332 }
321333 } else {
322334 dist [ 0 ] += snapDist [ 0 ] ;
323335 dist [ 1 ] += snapDist [ 1 ] ;
324336 if ( ! snapDist [ 0 ] ) {
325- dist [ 0 ] = throttle ( dist [ 0 ] * startValue [ 0 ] , throttleScale ! ) / startValue [ 0 ] ;
337+ dist [ 0 ] = throttle ( dist [ 0 ] * tempStartX , throttleScale ! ) / tempStartX ;
326338 }
327339 if ( ! snapDist [ 1 ] ) {
328- dist [ 1 ] = throttle ( dist [ 1 ] * startValue [ 1 ] , throttleScale ! ) / startValue [ 1 ] ;
340+ dist [ 1 ] = throttle ( dist [ 1 ] * tempStartY , throttleScale ! ) / tempStartY ;
329341 }
330342 }
331343
@@ -336,15 +348,24 @@ export default {
336348 dist [ 1 ] = ( prevDist [ 1 ] > 0 ? 1 : - 1 ) * MIN_SCALE ;
337349 }
338350 const delta = [ dist [ 0 ] / prevDist [ 0 ] , dist [ 1 ] / prevDist [ 1 ] ] ;
339- scale = multiply2 ( dist , startValue ) ;
351+ scale = multiply2 ( dist , [ tempStartX , tempStartY ] ) ;
352+
353+
354+
355+ const distText = `scale(${ dist . join ( ", " ) } )` ;
356+ const scaleText = `scale(${ scale . join ( ", " ) } )` ;
357+ const nextTransform = convertTransformFormat (
358+ datas , scaleText , distText ) ;
359+ const isZeroScale = ! startValue [ 0 ] || ! startValue [ 1 ] ;
340360
341361 const inverseDist = getScaleDist (
342362 moveable ,
343- dist ,
363+ isZeroScale ? scaleText : distText ,
344364 datas . fixedDirection ,
345365 fixedPosition ,
346366 datas . fixedOffset ,
347367 datas ,
368+ isZeroScale ,
348369 ) ;
349370 const inverseDelta = isSelfPinch ? inverseDist : minus ( inverseDist , datas . prevInverseDist || [ 0 , 0 ] ) ;
350371
@@ -360,8 +381,6 @@ export default {
360381 }
361382
362383
363- const nextTransform = convertTransformFormat (
364- datas , `scale(${ scale . join ( ", " ) } )` , `scale(${ dist . join ( ", " ) } )` ) ;
365384 const params = fillParams < OnScale > ( moveable , e , {
366385 offsetWidth : startOffsetWidth ,
367386 offsetHeight : startOffsetHeight ,
0 commit comments