@@ -466,6 +466,41 @@ const setSelectRect = (
466466 )
467467}
468468
469+ const getElementDurationTime = ( elementId ?: string ) => {
470+ const element = elementId ? querySelectById ( elementId ) : getDocument ( ) . body
471+ const durationTime = window . getComputedStyle ( element ) . getPropertyValue ( 'transition-duration' )
472+ const delayTime = window . getComputedStyle ( element ) . getPropertyValue ( 'transition-delay' )
473+ const transition = window . getComputedStyle ( element ) . getPropertyValue ( 'transition' )
474+ let delayArray : string [ ] = [ ]
475+ if ( transition ) {
476+ const delayRegex = / ( [ 0 - 9 ] + ( \. [ 0 - 9 ] + ) ? ) ( s | m s | S | M S ) /
477+ const transitions = transition . split ( ',' )
478+ transitions . forEach ( ( item ) => {
479+ const parts = item . trim ( ) . split ( ' ' )
480+ delayArray = delayArray . concat ( parts )
481+ } )
482+ delayArray = delayArray . filter ( ( delay ) => delayRegex . test ( delay ) )
483+ }
484+
485+ if ( durationTime ) {
486+ delayArray . push ( durationTime )
487+ }
488+
489+ if ( delayTime ) {
490+ delayArray . push ( delayTime )
491+ }
492+
493+ const delayTimes : any [ ] = delayArray . map ( ( item ) => {
494+ const unit = item . slice ( - 2 )
495+ if ( unit === 'ms' ) {
496+ return parseFloat ( item )
497+ } else {
498+ return parseFloat ( item ) * 1000
499+ }
500+ } )
501+ return delayTimes . length ? Math . max ( ...delayTimes ) : 300
502+ }
503+
469504export const updateRect = ( id ?: string ) => {
470505 id = ( typeof id === 'string' && id ) || getCurrent ( ) . schema ?. id
471506 clearHover ( )
@@ -481,17 +516,7 @@ export const updateRect = (id?: string) => {
481516 const isBodySelected = ! selectState . componentName && selectState . width > 0
482517
483518 if ( id || isBodySelected ) {
484- const element = querySelectById ( id ) || getDocument ( ) . body
485- const duration = window . getComputedStyle ( element ) . getPropertyValue ( 'transition-duration' )
486- let waitTime = 300
487- if ( duration ) {
488- const unit = duration . slice ( - 2 )
489- if ( unit === 'ms' ) {
490- waitTime = parseFloat ( duration )
491- } else {
492- waitTime = parseFloat ( duration ) * 1000
493- }
494- }
519+ const waitTime = getElementDurationTime ( id )
495520 setTimeout ( ( ) => setSelectRect ( id ) , waitTime )
496521 } else {
497522 clearSelect ( )
0 commit comments