2010-11-17 4 views
1

(fonctionne avec AS2.0 en raison des limitations du lecteur)Flash: Pagination avec XML

Dans mon application Flash, je dessine des données à partir d'un fichier XML. Ces données sont par exemple de 6 lignes dans une langue, mais peuvent être 20 dans une langue différente.

Cependant la zone de texte sur l'écran ne peut remplir que 10 lignes de texte et je voudrais donner l'option aux utilisateurs d'appuyer sur les flèches pour aller à la page suivante (s'il y a une page suivante).

Quelles sont mes options pour obtenir cet effet 'page'?

+0

Vous ne pouvez pas utiliser le défilement à la place? Le défilement est une meilleure option utilisateur pour les petites quantités de texte que la pagination. – Robusto

+0

Le défilement n'est malheureusement pas une option + ceci n'est qu'un exemple. La fin-xml sera des textes d'environ 200 lignes pour chaque chapitre. (pour 1 langue) – Jozzeh

Répondre

0

Vous pouvez calculer le nombre total de caractères pouvant correspondre à chaque page. Puis utilisez la sous-chaîne pour obtenir le texte pour chaque page jusqu'à ce que vous atteigniez la fin de la chaîne xml. Placez chaque chaîne de page dans un tableau et changez simplement le texte dans le champ de texte lorsque l'utilisateur clique sur la flèche en utilisant un modèle de type d'itérateur.

Modifier basé sur le commentaire:

Ah je vois ce que vous dites. Eh bien voici une force plus brute, méthode par caractère pour créer un tableau de champs de texte à ou autour d'une hauteur spécifiée.

var pageIndex = 0; 
var maxHeight = 300; 
var copy = "Some super long chunk of text here"; 

var pages = []; 

function parsePages() 
{ 
    for(var i = 0; i < copy.length; i++) 
    { 
     if(pages.length == 0) createPage(0); 

     pages[pageIndex].text += copy.charAt(i); 
     pages[pageIndex]._height = pages[pageIndex].textHeight; 

     if(pages[pageIndex]._height >= maxHeight) 
     { 
      pageIndex++; 
      createPage(pageIndex); 
     } 
    } 
} 

function createPage(index) 
{ 
    this.createTextField("page_"+index,this.getNextHighestDepth(),0,0,300,12); 
    this["page_"+index].multiline = true; 
    this["page_"+index].wordWrap = true; 
    this["page_"+index].font = "Arial"; 
    this["page_"+index].size = 10; 
    this["page_"+index].text = ""; 

    pages.push(this["page_"+index]); 
} 

parsePages(); 
+0

Merci pour votre réponse ... J'ai essayé de le faire, mais un seul caractère arabe pourrait être plus large qu'une lettre "normale". Cependant, j'utiliserais cette approche si je n'avais qu'à la créer en 1 langue. – Jozzeh

+0

Sur edit: Wow, c'est un processus assez lourd. Je l'ai essayé et j'ai travaillé ... beaucoup. – Jozzeh