|
Страница 1 из 1 [ Сообщений: 33 ] |
@st@l@vist@
участник
|
|
Для SingleLine поля еще может прокатить такой варинат:
Код: var index = 0;
function onEnterFrame() { if(index < a.text.length) { var tf = a.getTextFormat(index, index + 1); b.htmlText += a.text.substr(index, 1) + "\b"; b.setTextFormat(index, index + 1, tf); index++; } else { delete onEnterFrame; } } а для MultiLine увы все хуже и страшнее: нужно писать свой парсер. Создавай XML, типа: Код: var xml = new XML("<p><b>Text</b><br /><i>Text</i></p>"); Дальше парси и выводи по символу содержание текстового узла не забывая про дерево тэгов в которое он упакован Код: 1) <p><b>T</b></p> 2) <p><b>Te</b></p> 3) <p><b>Tex</b></p> 4) <p><b>Text</b></p> 5) <p><b>Text</b><br /></p> 5) <p><b>Text</b><br /><i>T</i></p> …
Не нравится перспектива? , … мне тоже
|
|
|
|
|
@st@l@vist@
участник
|
|
Ну вообще то, если не использовать вложенность тэгов в html, то можно сделать довольно просто, посмотри, может быть подойдет, а можно и дописать скриптец, мало ли найдется доброволец
Код: var source = new XML("<b>Description</b><br /><br />Use the methods and properties of the XML class to load, parse, send, build, and manipulate XML document trees.<br />You must use the constructor new XML() to create an XML object before calling any method of the XML class.<br /><br /><i>Note: The XML and XMLNode objects are modeled after the W3C DOM Level 1 recommendation:</i><br /><br /><a href=\"http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html\">http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html</a>"); var node = 0; var char = 0; var output = ""; var tmp = ""; function onEnterFrame() { if(node < source.childNodes.length) { if(source.childNodes[node].nodeName != null) { var attr = ""; for(var a in source.childNodes[node].attributes) { attr += " " + a + "=\"" + source.childNodes[node].attributes[a] + "\" "; } var startTag = "<" + source.childNodes[node].nodeName + attr + ">"; var endTag = "</" + source.childNodes[node].nodeName + ">"; var contents = source.childNodes[node].firstChild.toString(); } else { var contents = source.childNodes[node].toString(); var startTag = ""; var endTag = ""; }
if(char < contents.length) { tmp += contents.substr(char, 1); char++ txt.htmlText = output + startTag + tmp + endTag; } else { output += startTag + tmp + endTag; tmp = ""; char = 0; node++ txt.htmlText = output; } } else { delete onEnterFrame; } }
|
|
|
|
|
@st@l@vist@
участник
|
|
Eduard, скрипт фиговый - просто один из возможных путей решения …
Есть кстати еще один способ, но если делать одноцветный, однородный фон у текстового поля:
Код: var html = ""; html += "<html>"; html += "<body>"; html += "<p>"; html += "<u><b><font size=\"20\" face=\"Courier\" color=\"#CC3300\"><a href=\"http://google.com\" target=\"_blank\">Description</a></font></b></u><br /><br />"; html += "The <b>setTextFormat()</b> method changes the text formatting applied to an individual character, to a range of characters, or to the entire body of text in a text field.<br />"; html += "</p>"; html += "</body>"; html += "</html>"; var chars = 1; var tf = new TextFormat(); tf.color = 0xCCCCCC; createTextField("_txt", 1, 50, 50, 600, 300); _txt.html = true; _txt.multiline = true; _txt.background = true; _txt.backgroundColor = tf.color; _txt.selectable = false; _txt.wordWrap = true;
function onEnterFrame() { _txt.htmlText = html; _txt.setTextFormat(chars, _txt.length, tf); chars++; }
Но тут явная проблема с маркированными списками - это те что UL -> LI
Это кстати вообще проблема, которую так и не решили …
|
|
|
|
|
Eduard
участник
|
|
а что за глюк такой , загружаю большой текст Код: loadVariables("data/text.txt", this) , в котором есть двойной тег Код: <br><br> и флеш жутко начинает тормозить , даже если просто присвоить текст полю , убираю один из бр-ов все нормально …
|
|
|
|
|
@st@l@vist@
участник
|
|
<br> - для html, но существует рекомендация, закрывать тэги, то есть <br></br> или покороче <br /> - это важно если загружать xml и пихать его в htmlText …
А что там у Eduard'a, науке не известно - смотреть нада, ну и на сколько я знаю, флеш вообще не очень любит огромные тексты, может быть там есть и лимит какойто …
|
|
|
|
|
bE(o0L
постоянный участник
|
|
зачем?
_________________ можно на ТЫ.
|
|
|
|
|
bE(o0L
постоянный участник
|
|
не можешь без <table> во флеше, значит тебе прямая дорога в HTML сайты
_________________ можно на ТЫ.
|
|
|
|
|
Eduard
участник
|
|
без разницы , что <br><br> что <br><br /> одно и то же , после (или во время) загрузки текста из файла data.txt (в котором &t=…...большой текст.….& , флеш как бы замирает на секунду . Если убираю двойной БР или умегьшаю текст , то задержка исчезает. Может и правда флеш не расчитан на большие тексты , я проверил это , сделал чистую флешку в ней небольшое текстовое поле instant name = ttt
Код: this.loadVariables("text.txt"); this.onData = function() { ttt.htmlText = this.t; };
без разницы какое поле , и какая флешка , как приcсваивать текст полю через его имя или его Var name , задержка остается !
|
|
|
|
|
bE(o0L
постоянный участник
|
|
Eduard, знаешь, проблема скорее всего не в текстах и <br>`ах... Я загружаю через LoadVars () достаточно большие тексты с нектороым html форматированием, <br>`ов подряд там натыкано - будь здоров! (клиенты сами чёт набирают). Никаких торможений.
_________________ можно на ТЫ.
|
|
|
|
|
Eduard
участник
|
|
bE(o0L, проверил LoadVars () , результат то же самый что и при loadVariables
Код: txt = new LoadVars(); txt.load("text.txt"); txt.onData = function(datatext) { ttt.htmlText = datatext; };
|
|
|
|
|
bE(o0L
постоянный участник
|
|
Eduard, а дай ссылку на этот text.txt ?
_________________ можно на ТЫ.
|
|
|
|
|
bE(o0L
постоянный участник
|
|
_________________ можно на ТЫ.
|
|
|
|
|
bE(o0L
постоянный участник
|
|
нужно так:
// вторая кнопка
Код: on (release) { txt2 = new LoadVars(); txt2.load("text2.txt"); txt2.onLoad = function() { _root.a=unescape(this) }; }
и полю ttt2 присвоить переменную a
_________________ можно на ТЫ.
|
|
|
|
|
bE(o0L
постоянный участник
|
|
у меня нету задержки
_________________ можно на ТЫ.
|
|
|
|
|
bE(o0L
постоянный участник
|
|
Eduard, мистика. щас повнимательней посмотрю всё.
_________________ можно на ТЫ.
|
|
|
|
|
@st@l@vist@
участник
|
|
Это не мистика , и уж тем более проблема не в способе загрузки данных … - это фиговый парсер, чем сложнее структура html, чем больше нодов, чем больше текст - тем больше пройдет времени с момента от txt.htmlText = htmlString и до момента когда все это отобразится.
Это легко проверить, поставте таймер, и посмотрите зависимость.
p.s.: А кроме этого, с большими текстами, флеш не дружил всегда!
|
|
|
|
|
bE(o0L
постоянный участник
|
|
@st@l@vist@, фишка именно в двух и более <br> подряд. если гденить в документе есть ещё хотябы один <br> то работает без задержки (парсинга). Во всяком случае у меня так. (вот тока проверил)
_________________ можно на ТЫ.
|
|
|
|
|
@st@l@vist@
участник
|
|
Посмотрел пример, и …. О да! Везет же Eduard'у на "черные дыры"
Код: var timer = 0; var str1 = "test text test text <br><br>"; // var str2 = "test text test text<br>"; // ~=330 // var str2 = "test text test text<br><br>"; // ~=660 var str2 = "test text test text"; // ~=6600 for(var i = 0; i < 1000; i++) { str1 += str2; } createTextField("txt", 1, 0, 0, 200, 300); txt.html = true; txt.background = true; txt.multiline = true; txt.wordWrap = true; function onMouseDown() { txt.htmlText = ""; timer = getTimer(); txt.htmlText = str1; onEnterFrame = oEF; } function oEF() { if(txt.length > 1) { trace(getTimer() - timer); delete onEnterFrame; delete onMouseDown; } }
|
|
|
|
|
_iv
Модератор
|
|
сделал вот такую ботву, вроде работает:
Код: this.setHtmlPrinterClass = function() { delete this.setHtmlPrinterClass; var HtmlPrinter = function (htmlText) { this.init(htmlText); }; var tmp = HtmlPrinter.prototype; tmp.getHTMLText = function(length) { if (length>=this.length) { return this.xhtml.toString(); } var len = 0; var i = 0; var text_array = this.text_array; while (text_array[i].to<length) { i++; } var item = text_array[i]; var node = item.node; var add_str = node.nodeValue; add_str = add_str.substr(0, length-(item.to-item.length)); var add_node = node.parentNode; while (add_node.parentNode) { add_str += "</"+add_node.nodeName+">"; add_node = add_node.parentNode; } var delimiter = new XML("__HtmlPrinterDelimiter__").firstChild; node.parentNode.insertBefore(delimiter, node); var out_string = this.xhtml.toString(); var str = out_string.substr(0, out_string.indexOf("__HtmlPrinterDelimiter__")); out_string = str+add_str; delimiter.removeNode(); if (out_string.length) { return out_string; } return ""; }; /////////////////////////////////////// PRIVATE tmp.init = function(htmlText) { var name = "setHtmlPrinterClass"+new Date().getTime()+"_mc"; var depth = _root.getNextHighestDepth(); while (_root[name] != undefined) { name += new Date().getTime(); } var mc = _root.createEmptyMovieClip(name, depth); mc.createTextField("t_txt", 0, 0, 0, 300, 300); var t_txt = mc.t_txt; t_txt.wordWrap = t_txt.multiline=t_txt.html=true; t_txt.htmlText = htmlText; this.registerXML(new XML(t_txt.htmlText)); mc.removeMovieClip(); }; tmp.registerXML = function(in_xml) { this.xhtml = in_xml; var node = in_xml.firstChild; var text_array = []; this.length = 0; while (node) { if (node.nodeType == 3) { var length = node.nodeValue.length; this.length += length; text_array.push({node:node, length:length, to:this.length}); } node = nextNode(node); } this.text_array = text_array; }; // next node var nextNode = function (node) { if (node.firstChild != null) { return node.firstChild; } var n = node; while (n.nextSibling == null) { if (n.parentNode) { n = n.parentNode; } else { return null; } } return n.nextSibling; }; // _global.org = _global.org || {}; _global.org.dembicki = _global.org.dembicki || {}; _global.org.dembicki.HtmlPrinter = _global.org.dembicki.HtmlPrinter || HtmlPrinter; _global.ASSetPropFlags(_global.org.dembicki, "HtmlPrinter", 7, 1); }; this.setHtmlPrinterClass(); // USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE */ html = '<P ALIGN=\"LEFT\"><FONT FACE=\"Courier\" SIZE=\"20\" COLOR=\"#CC3300\" LETTERSPACING=\"0\" KERNING=\"0\"><A HREF=\"http://google.com\" TARGET=\"_blank\"><B><U>Description</U></B></A></FONT></P><P ALIGN=\"LEFT\"><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">The <B>setTextFormat()</B> method changes the text formatting applied to an individual character, to a range of characters, or to the entire body of text in a text field.</FONT></P><LI><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">any text 1</FONT></LI><LI><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">any text 2</FONT></LI><LI><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">any text 3</FONT></LI><LI><FONT FACE=\"Times New Roman\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">any text 4</FONT></LI>'; // this.createTextField("in_txt", 0, 0, 0, 200, 300); this.in_txt.html = this.in_txt.wordWrap=this.in_txt.multiline=true; this.createTextField("out_txt", 1, 210, 0, 200, 300); this.out_txt.html = this.out_txt.wordWrap=this.out_txt.multiline=true; // this.in_txt.htmlText = html; this.foo = new _global.org.dembicki.HtmlPrinter(html); this.k = 0; this.onEnterFrame = function() { this.out_txt.htmlText = this.foo.getHTMLText(this.k++); }; delete html; // */
|
|
|
|
|
@st@l@vist@
участник
|
|
Оказывается Eduard'у везет не только на жуков, но и на добровольцев
p.s.: занятная миграция народа происходит
|
|
|
|
|
|
Страница 1 из 1 [ Сообщений: 33 ] |
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
|
|