Статьи

Создайте класс маскирования паролей в ActionScript 3.0

Поля пароля позволяют вам создать поле, подобное текстовому полю, в которое пользователи могут вводить. Однако поле пароля приводит к тому, что все отображается в виде звездочек (*), поэтому наблюдатели не могут видеть, что набирается.

В этом уроке мы создадим статический класс, который преобразует поле ввода TextField в поле пароля, похожее на iPhone.




Мы будем использовать статический атрибут в ActionScript 3.0 для объявления класса, для которого не требуется создавать экземпляр, таким образом мы можем вызывать его методы без создания объекта с помощью оператора new .

Наш класс создаст Timer , который заменит символы целевого TextField на любой данный символ в указанное время.

Откройте Flash и создайте новый файл Flash (ActionScript 3).

Установите размер сцены 600×300 и добавьте серый линейный фон (#EEEEEE, #DDDDDD).

«»

Давайте добавим некоторые графические детали в наше приложение.

Выберите Rectangle Tool (R), создайте прямоугольник 600x50px и заполните его # 222222.

Создайте статическое TextField для добавления заголовка. Я использовал Helvetica Bold 21pt в качестве TextFormat.

Используйте инструмент Rectangle Primitive Tool, чтобы создать прямоугольник размером 200×30 пикселей (#AAAAAA) и измените радиус на 6,00. Дублируйте эту форму (Cmd + D), измените ее размер до 198x28px, измените его цвет на #EEEEEE и отцентрируйте его в предыдущей форме.

Добавьте текст для обозначения поля.

Это завершит графическую часть.

Мы создадим поле ввода TextField, которое мы будем использовать для получения ввода от пользователя и для указания цели в нашем классе маскирования паролей.

Выберите инструмент Text Tool (T) и поместите текстовое поле ввода в фон, который мы создали ранее. Установите его имя экземпляра в passField .

Создайте новый документ ActionScript и сохраните его как iPass.as . Это будет наш статический класс.

Классы нам понадобятся. За конкретной информацией обращайтесь к справке по Flash (F1).

1
2
3
4
5
6
7
8
package classes
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;

Мы собираемся использовать определенные методы и свойства Sprite, поэтому мы расширяем его с помощью класса Sprite.

1
2
public class iPass extends Sprite
{

Это переменные, которые мы будем использовать, объяснено в комментариях. Обратите внимание, что переменные объявлены как статические, чтобы иметь доступ без экземпляра.

1
2
3
4
public static var pass:String = «»;
public static var target:TextField;
private static var regExp:RegExp = /./g;
public static var timer:Timer = new Timer(1000);

Это метод, который мы будем вызывать для использования класса.

1
2
3
4
5
public static function maskTextField(t:TextField):void //We need a parameter that will specify the target TextField
{
    target = t;
    addListeners();
}

Это функция, которая заменит символы в целевом поле.

1
2
3
4
5
private static function replaceOnTime(e:TimerEvent):void
{
    target.text = target.text.replace(regExp, «•»);
    timer.stop();
}

Эта функция запускает таймер, когда целевое текстовое поле находится в фокусе и нажата кнопка.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
private static function startTimer(e:KeyboardEvent):void
{
    /* If the timer is not running, start it, else, reset timer, replace all characters but last, and run timer again */
 
    !timer.running ?
 
    /* Filters valid keys, from a to Z */
 
    for (var i:int = 65; i < 123; i++)
    {
        if (e.charCode == i)
        {
            pass += String.fromCharCode(i);
        }
    }
 
    if (e.keyCode == Keyboard.BACKSPACE)
    {
        pass = pass.substring(0, pass.length — 1);
    }
}

Добавляет слушателей к объектам Timer и TextField.

1
2
3
4
5
private static function addListeners():void
{
    timer.addEventListener(TimerEvent.TIMER, replaceOnTime);
    target.addEventListener(KeyboardEvent.KEY_UP, startTimer);
}

Этот класс вызовет статический класс iPass и передаст TextField на этапе в качестве параметра.

Создайте новый документ ActionScript и сохраните его как Main.as.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
package classes
{
    import classes.iPass;
    import flash.display.Sprite;
     
    public class Main extends Sprite
    {
        public function Main():void
        {
            iPass.maskTextField(passField);
        }
         
        /*private function getPassword():void
        {
            trace(iPass.pass);
        }*/
    }
}

Вернитесь к файлу .Fla и в панели свойств добавьте classes.Main в поле Class, чтобы сделать его классом документов.

Вы создали класс маски паролей и узнали, как создавать и использовать статический класс — экспериментируйте с его преимуществами!

Спасибо за прочтение!