Skip to main content
Known Participant
March 29, 2023
Answered

jsfl to be fixed

  • March 29, 2023
  • 1 reply
  • 636 views

The following jsfl can only increase or decrease frames for a single frame,
How to increase or decrease frames for selected multiple layers and frames

fl.outputPanel.clear();

var doc = fl.getDocumentDOM();
var tl = doc.getTimeline();

var numFrames = prompt("Enter the number of frames to add or subtract:  ");
numFrames = parseInt(numFrames);
var insFrm = Math.abs(numFrames);
var selectFrame=tl.currentFrame;
if(isNaN(numFrames)){
	alert("please enter a number");
 }else{
	if(numFrames<0){
		tl.removeFrames(selectFrame,selectFrame+insFrm);
	}else{
		tl.insertFrames(insFrm);
	}
	
}
This topic has been closed for replies.
Correct answer Vladin M. Mitov

 

(function(){
	
	var doc = fl.getDocumentDOM();
	var tml = doc.getTimeline();

	main();

	function main(){
		var selection = tml.getSelectedFrames();
		var numFrames = parseInt( prompt( "Enter the number of frames to add or subtract:  " ) );
		if( isNaN( numFrames ) ){
			alert("Please enter a number");
			return;
		}
		var i, l, s, e, insFrm = Math.abs( numFrames );
		
		for( i = 0; i < selection.length; i +=3 ){
			l = selection[i], s = selection[i+1], e = selection[i+2];
			
			if( numFrames < 0 ){
				removeFrames( tml.layers[ l ], l, s, e, insFrm );
			}else{
				addFrames( tml.layers[ l ], l, s, e, insFrm );
			}
		}
		
		tml.setSelectedFrames([], true);		
	}
	function addFrames( xlayer, l, s, e, fn ){
		var f = e;
		while( f > s ){
			f = Math.max( s, getLayerPrevKey( xlayer, f ) );
			tml.setSelectedFrames( [ l, f, f+1 ], true );
			tml.insertFrames( fn );
		}
	}
	function removeFrames( xlayer, l, s, e, fn ){
		var f = e;
		while( f > s ){
			f = Math.max( s, getLayerPrevKey( xlayer, f ) );
			tml.currentLayer = l;
			tml.removeFrames( f+1, f+1+fn );
		}
	}
	function getLayerPrevKey( alayer, sf ){
		if( ! alayer ) return null;
		var fi = ( ( sf - 1 ) < 0 ) ? 0 : sf - 1;
		var fr = alayer.frames[ fi ];
		if( ! fr ) return null;
		return fr.startFrame;
	}

	
})();

 



1 reply

Vladin M. Mitov
Inspiring
March 29, 2023
	main();
	
	function main(){
		
		var doc = fl.getDocumentDOM();
		var tl = doc.getTimeline();
		var numFrames = parseInt( prompt( "Enter the number of frames to add or subtract:  " ) );
		var insFrm = Math.abs( numFrames );
		var currentFrame = tl.currentFrame;
		var selectedlayers = getSelectedLayers( tl );

		if( isNaN( numFrames ) ){
			alert("Please enter a number");
			return;
		}else{
			if( numFrames < 0 ){
				removeFrames( tl, currentFrame, insFrm, selectedlayers );
			}else{
				insertFrames( tl, currentFrame, insFrm, selectedlayers );
			}
		}
		
		tl.setSelectedFrames([], true);
	}
	function getSelectedLayers( tl ){
		var i, retval = [], sel = tl.getSelectedFrames();
		for( i = 0; i < sel.length; i += 3 ){
			retval.push( sel[ i ] );
		}
		return retval;
	}
	function removeFrames( tl, cf, fn, selected ){
		var i;
		for( i = 0; i < selected.length; i++ ){
			tl.currentLayer = selected[ i ];
			tl.removeFrames( cf, cf + fn );
		}	
	}
	function insertFrames( tl, cf, fn, selected ){
		var i;
		for( i = 0; i < selected.length; i++ ){
			tl.currentLayer = selected[ i ];
			tl.setSelectedFrames( [ selected[ i ], cf, cf+1], true );
			tl.insertFrames( fn );
		}		
	}
	

 

 

- Vlad: UX and graphic design, Flash user since 1998Member of Flanimate Power Tools team - extensions for character animation
kqskcmAuthor
Known Participant
March 29, 2023

It is necessary to increase or decrease frames for multiple frames selected by the box,
At present, only the position of 15 frames can be increased or decreased.