Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Эффект нажатия на слово в тексте, как сделать? (http://www.flasher.ru/forum/showthread.php?t=83401)

Andrew_J 03.08.2006 23:53

Эффект нажатия на слово в тексте, как сделать?
 
Всем привет, вот пытаюсь придумать такую штуку с текстом.
Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную.
Подскажите как тут поступить и какие возможны способы?

зы: текст заранее не известен, есть только массив слов или строка слов разделенных пробелом.

flash33 04.08.2006 15:59

Сделай не текстовое поле а набор movieclip с единственным словом в нем.
рабей строку на массив и последовательно аттач мувики со следующими друг за другом словами, выдернутыми из массива. Создай в прототипе мувика свойство onPress которое бы выводило номер этого мувика и перекрашивало его в нужный цвет.. Вроде так

bbexp 04.08.2006 17:04

Если поле - динамическое, со включенным selectable, то можно проверить на какой позиции стоит курсор (объект Selection, метод getCaretIndex).
Потом написать функцию, определяющую какое слово занимает такую позицию. Выяснив слово и определив его начальный и конечный индексы - применить TextFormat для переформатирования слова.

Если selectable = false; - то геморрой обеспечен.
Конечно можно выяснить какой высоты-ширины текстовое поле, какая гарнитура, попытатся определить длину каждого слова исходя из букв, его составляющих, но уверяю - это будет мерзкое занятие.

Тут действительно проще будет составить текст из муви Клипов, и на них уже вешать код.

KidsKilla 04.08.2006 17:44

Код:

var txt = 'Всем привет, вот пытаюсь придумать такую штуку с текстом.';
txt += 'Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную.';
txt += 'Подскажите как тут поступить и какие возможны способы?';
var _txt = this.createTextField('_txt', 0, 0, 0, 500,null);
_txt.html = true;
_txt.autoSize = true;
_txt.selectable = false;
_txt.wordWrap = true;
var arr = txt.split(' ');
var i = arr.length;
while(i--){
        arr[i] = '<a href="asfunction:trace, '+i+'">'+arr[i]+'</a>';
}
txt = arr.join(' ');
_txt.htmlText = txt;


amphetamine 04.08.2006 18:18

KidsKilla всех порвал =)

KidsKilla 04.08.2006 18:21

Цитата:

Сообщение от amphetamine
KidsKilla всех порвал =)

Код:

function arr2html(arr) {
        var a = arr.concat([])
        var i = a.length;
        while (i--) {
                a[i] = '<a href="asfunction:fun, '+i+'">'+a[i]+'</a>';
        }
        return a.join(' ');
}
function fun(num:String):Void {
        var a:Array = arr.concat([]);
        var n:Number = parseInt(num);
        trace('"'+a[n]+'": '+n)
        a[n] = '<font color="#FF0000">'+a[n]+'</font>';
        _txt.htmlText = arr2html(a);
}
var txt = 'Всем привет, вот пытаюсь придумать такую штуку с текстом.';
txt += 'Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную.';
txt += 'Подскажите как тут поступить и какие возможны способы?';
var _txt = this.createTextField('_txt', 0, 0, 0, 500, null);
_txt.html = true;
_txt.autoSize = true;
_txt.selectable = false;
_txt.wordWrap = true;
var arr = txt.split(' ');
_txt.htmlText = arr2html(arr);

дубль2 рвём накуски. =)))

KUZEN 04.08.2006 18:24

Как вариант

Код:

my_array = ["Вот", "такое", "вот", "предложение", "получается", "бла-бла-бла"];
F_createText = function () {
        _root.createTextField("tf", 1, 10, 10, 530, 420);
        with (tf) {
                border = true;
                html = true;
        }
        //
        var len = my_array.length;
        firstIndex = 0;
        lastIndex = 0;
        for (var i = 0; i<len; i++) {
                lastIndex += my_array[i].length+1;
                if (i != 0) {
                        firstIndex = lastIndex-my_array[i].length-1;
                }
                tf.htmlText += '<a href=\"asfunction:F_change,'+firstIndex+','+lastIndex+'\">'+my_array[i]+" </a>";
        }
};
F_createText();
//
F_change = function (index) {
        a = index.split(",");
        //
        var str = tf.text.substring(a[0], a[1]);
        tf.replaceText(a[0], a[1], str.toUpperCase());
};


KidsKilla 04.08.2006 18:34

Цитата:

Сообщение от KUZEN
Как вариант

Код:

my_array = ["Вот", "такое", "вот", "предложение", "получается", "бла-бла-бла"];

my_array = ("Вот такое вот предложение получается бла-бла-бла").split(' ');

кстати, в одинарных кавычках двойные экранировать не надо...

Andrew_J 04.08.2006 19:31

Всё гениальное просто :eek:
Не думал, что можно было все так сделать без гемора на пару дней.

Спасибо вам друзья :drinks:

KidsKilla, расскажи секрет, почему слова начинают нажиматься как кнопки, и что значит эта строчка:
Код:

a[i] = '<a href="asfunction:fun, '+i+'">'+a[i]+'</a>';

flash33 04.08.2006 19:41

Вложений: 1
вот еще накалякал, может подойдет?


Часовой пояс GMT +4, время: 00:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.