Панорамирование и прокрутка экранных объектов

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

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

Свойство scrollRect является экземпляром класса Rectangle. В этом классе сочетаются значения, которые необходимы для определения прямоугольной области в качестве единичного объекта. Чтобы определить вначале видимую область экранного объекта, создайте новый экземпляр Rectangle и присвойте его свойству scrollRect экранного объекта. Впоследствии для панорамирования или прокрутки свойство scrollRect считывается и заносится в отдельную переменную Rectangle. Требуемое свойство изменяется (например, измените свойство x экземпляра Rectangle, чтобы выполнить панорамирование, или свойство y, чтобы выполнить прокрутку). Затем необходимо переназначить экземпляр Rectangle свойству scrollRect, чтобы сообщить объекту об изменении значения.

Например, следующий код определяет обозримую область для объекта TextField с именем bigText, который слишком высок, чтобы вместиться в границы SWF-файла. При нажатии двух кнопок (up и down) они вызывают функции, отвечающие за прокрутку содержимого объекта TextField вверх и вниз путем изменения свойства y экземпляра RectanglescrollRect.

import flash.events.MouseEvent; 
import flash.geom.Rectangle; 
 
// Define the initial viewable area of the TextField instance: 
// left: 0, top: 0, width: TextField's width, height: 350 pixels. 
bigText.scrollRect = new Rectangle(0, 0, bigText.width, 350); 
 
// Cache the TextField as a bitmap to improve performance. 
bigText.cacheAsBitmap = true; 
 
// called when the "up" button is clicked 
function scrollUp(event:MouseEvent):void 
{ 
    // Get access to the current scroll rectangle. 
    var rect:Rectangle = bigText.scrollRect; 
    // Decrease the y value of the rectangle by 20, effectively  
    // shifting the rectangle down by 20 pixels. 
    rect.y -= 20; 
    // Reassign the rectangle to the TextField to "apply" the change. 
    bigText.scrollRect = rect; 
} 
 
// called when the "down" button is clicked  
function scrollDown(event:MouseEvent):void 
{ 
    // Get access to the current scroll rectangle. 
    var rect:Rectangle = bigText.scrollRect; 
    // Increase the y value of the rectangle by 20, effectively  
    // shifting the rectangle up by 20 pixels. 
    rect.y += 20; 
    // Reassign the rectangle to the TextField to "apply" the change. 
    bigText.scrollRect = rect; 
} 
 
up.addEventListener(MouseEvent.CLICK, scrollUp); 
down.addEventListener(MouseEvent.CLICK, scrollDown);

Как показано в этом примере, при работе со свойством scrollRect экранного объекта лучше всего указать, что Flash Player или AIR должны кэшировать содержимое объекта в качестве растрового изображения с помощью свойства cacheAsBitmap. При этом Flash Player и AIR не требуется повторно отрисовывать все содержимое экранного объекта после каждой прокрутки. Вместо этого можно использовать кэшированное растровое изображение, чтобы визуализировать необходимую часть напрямую на экран. Сведения см. в разделе «Кэширование экранных объектов».