Paket | flashx.textLayout.events |
Klass | public class CompositionCompleteEvent |
Arv | CompositionCompleteEvent Event Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
De tre huvudsakliga metoder som skickar den här händelsen är compose()
, updateToController()
och updateAllControllers()
. Alla tre metoderna finns i klassen StandardFlowComposer.
Obs! Om händelsen skickas av metoden updateAllControllers()
ska updateAllControllers()
inte anropas igen i händelsehanterarfunktionen. Ett sådant anrop skulle bli rekursivt, eftersom metoden updateAllControllers()
kör både dispositions- och visningsstegen. updateAllControllers()
skickar den här händelsen när dispositionen är klar, men innan visningssteget körs. Samma sak gäller metoden updateToController()
.
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
bubbles : Boolean [skrivskyddad]
indikerar om händelsen är en bubblande händelse. | Event | ||
cancelable : Boolean [skrivskyddad]
Indikerar om beteendet som är kopplat till händelsen kan förhindras. | Event | ||
compositionLength : int
Det antal tecken som disponerats. | CompositionCompleteEvent | ||
compositionStart : int
Startpositionen för det textområdet som påverkas av dispositionen, uttryckt som ett index i textflödet. | CompositionCompleteEvent | ||
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
currentTarget : Object [skrivskyddad]
Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. | Event | ||
eventPhase : uint [skrivskyddad]
Den nuvarande fasen i händelseflödet. | Event | ||
target : Object [skrivskyddad]
Händelsens mål. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
TextFlow för vilket disposition har slutförts. | CompositionCompleteEvent | ||
type : String [skrivskyddad]
Händelsens typ. | Event |
Metod | Definieras med | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Konstruktor
| CompositionCompleteEvent | ||
Skapar ett duplikat av en instans av en Event-underklass. | Event | ||
Ett verktyg som används för att implementera metoden toString() i de anpassade klasserna ActionScript 3.0. | Event | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Kontrollerar om preventDefault()-metoden har anropats för händelsen. | Event | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Avbryter en händelses standardbeteende om det beteendet kan avbrytas. | Event | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Förhindrar behandling av händelsehanterare i den aktuella noden och alla noder som följer den aktuella noden i händelseflödet. | Event | ||
Förhindrar behandling av händelsehanterare i noder som följer den aktuella noden i händelseflödet. | Event | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar en sträng som innehåller alla egenskaper i Event-objektet. | Event | ||
Returnerar det angivna objektets primitiva värde. | Object |
Konstant | Definieras med | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [statisk]
Definierar värdet för ett compositionComplete-händelseobjekts type-egenskap
| CompositionCompleteEvent |
compositionLength | egenskap |
compositionStart | egenskap |
compositionStart:int
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Startpositionen för det textområdet som påverkas av dispositionen, uttryckt som ett index i textflödet.
Implementering
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | egenskap |
textFlow:flashx.textLayout.elements:TextFlow
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
TextFlow för vilket disposition har slutförts.
Implementering
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Konstruktor |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Konstruktor
Parametrartype:String — händelsetyp - använd den statiska egenskapen COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — indikerar om händelsen är en bubblande händelse. Den här händelsen bubblar inte.
| |
cancelable:Boolean (default = false ) — Indikerar om beteendet som är kopplat till händelsen kan förhindras. Den här händelsen kan inte avbrytas.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — Det TextFlow som disponerades.
| |
compositionStart:int (default = 0 ) — start av kompositionen, uttryckt som ett index i textflödet.
| |
compositionLength:int (default = 0 ) — längden på antal tecken som disponerats
|
COMPOSITION_COMPLETE | Konstant |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Definierar värdet för egenskapen type
för compositionComplete
-händelseobjektet
I det här exemplet visas hur du använder klassen CompositionCompleteEvent för att markera ett visst ord i ett textflöde. Tekniken utgör ett alternativ till att ange egenskapen TextLayoutFormat.backgroundColor
innan texten har disponerats.
Metoden compositionCompleteHandler()
körs efter att metoden updateAllControllers()
initierar körning genom att disponera texten, men innan updateAllControllers()
slutför körningen genom att uppdatera visningslistan. På så sätt kan händelsehanterarmetoden skapa markeringen av ordet "shall" innan updateAllControllers()
uppdaterar visningslistan.
package flashx.textLayout.events.examples { import flash.display.Graphics; import flash.display.Sprite; import flash.geom.Rectangle; import flash.text.engine.TextLine; import flashx.textLayout.compose.StandardFlowComposer; import flashx.textLayout.compose.TextFlowLine; import flashx.textLayout.container.ContainerController; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.FlowLeafElement; import flashx.textLayout.elements.ParagraphElement; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.events.CompositionCompleteEvent; public class CompositionCompleteEvent_example extends Sprite { private var wordToHighlight:String = "shall"; private var poemContainer:Sprite; private var txtFlow:TextFlow; private var controller:ContainerController; private const poem:String = "Sonnet 18\n" + "Shall I compare thee to a summer's day?\n" + "Thou art more lovely and more temperate:\n" + "Rough winds do shake the darling buds of May,\n" + "And summer's lease hath all too short a date:\n" + "Sometime too hot the eye of heaven shines,\n" + "And often is his gold complexion dimmed,\n" + "And every fair from fair sometime declines,\n" + "By chance, or nature's changing course untrimmed:\n" + "But thy eternal summer shall not fade,\n" + "Nor lose possession of that fair thou ow'st,\n" + "Nor shall death brag thou wand'rest in his shade,\n" + "When in eternal lines to time thou grow'st,\n" + "So long as men can breathe or eyes can see,\n" + "So long lives this, and this gives life to thee.\n" + "William Shakespeare\n"; public function CompositionCompleteEvent_example() { poemContainer = new Sprite(); txtFlow = new TextFlow(); poemContainer.x = 30; poemContainer.y = 30; this.stage.addChild( poemContainer ); controller = new ContainerController(poemContainer, 300, 230); controller.verticalScrollPolicy = flashx.textLayout.container.ScrollPolicy.OFF; txtFlow = TextConverter.importToFlow( poem, TextConverter.PLAIN_TEXT_FORMAT ); txtFlow.flowComposer = new StandardFlowComposer(); txtFlow.addEventListener(CompositionCompleteEvent.COMPOSITION_COMPLETE, compositionCompleteHandler); txtFlow.flowComposer.addController( controller ); txtFlow.flowComposer.updateAllControllers(); } private function compositionCompleteHandler(event:CompositionCompleteEvent):void { if (event.textFlow == txtFlow) { checkForMatchingWord(); } } private function checkForMatchingWord():void { var currentLeaf:FlowLeafElement = txtFlow.getFirstLeaf(); var currentParagraph:ParagraphElement = currentLeaf ? currentLeaf.getParagraph() : null; while (currentParagraph) { // iterate over all paragraphs in the text flow var paraStart:uint = currentParagraph.getAbsoluteStart(); var currWordBoundary:int = 0; var nextWordBoundary:int = 0; var pattern:RegExp = new RegExp(wordToHighlight, "i"); while (true) { // iterate over letters in a word nextWordBoundary = currentParagraph.findNextWordBoundary(currWordBoundary); if (nextWordBoundary == currWordBoundary) { break; // end of paragraph; break of inner while loop } var word:String = ''; var indexInLeaf:int = currWordBoundary + paraStart - currentLeaf.getAbsoluteStart(); var wordLen:uint = nextWordBoundary - currWordBoundary; while (true){ // traverse consecutive leaf elements looking for 'wordLen' characters // Take as many characters from the current leaf as possible to meet the quota of 'wordLen' var consumeCount:uint = indexInLeaf + wordLen <= currentLeaf.textLength ? wordLen : currentLeaf.textLength - indexInLeaf; word += currentLeaf.text.substr (indexInLeaf, consumeCount); wordLen -= consumeCount; if (!wordLen) break; // Quota not met; move to the next leaf // Also reset the index where the next leaf will be scanned currentLeaf = currentLeaf.getNextLeaf(); indexInLeaf = 0; } if (pattern.test(word)) { highlightWord(currWordBoundary, nextWordBoundary, word, paraStart); } currWordBoundary = nextWordBoundary; } // At this point, currentLeaf is the last leaf in currentParagraph. Move to the next paragraph. currentLeaf = currentLeaf.getNextLeaf(); currentParagraph = currentLeaf ? currentLeaf.getParagraph() : null; } } private function highlightWord(begin:int, end:int, word:String, paraStart:int):void { var absoluteBegin:int = paraStart + begin; var absoluteEnd:int = paraStart + end; var startTextFlowLineIndex:int = txtFlow.flowComposer.findLineIndexAtPosition(absoluteBegin); var endTextFlowLineIndex:int = txtFlow.flowComposer.findLineIndexAtPosition(absoluteEnd); var txtFlowLine:TextFlowLine = txtFlow.flowComposer.getLineAt(startTextFlowLineIndex); var txtLine:TextLine = txtFlowLine.getTextLine(); // get the bounds of the first and last Atom of the textLine var startbounds:Rectangle = txtLine.getAtomBounds(txtLine.getAtomIndexAtCharIndex(begin)); var endbounds:Rectangle = txtLine.getAtomBounds(txtLine.getAtomIndexAtCharIndex(end)); var box:Sprite = new Sprite(); var g:Graphics = box.graphics; g.lineStyle(1, 0xFFFF00, 0.5); // set line style g.beginFill(0xFFFF00, 0.3); // set fill style // draw a rectangle around the specified boundaries g.drawRect(startbounds.left, startbounds.top, (endbounds.x - startbounds.x), startbounds.height); txtLine.addChild(box); } } }
Tue Jun 12 2018, 01:40 PM Z