![]() |
Как достать ширину загруженной картинки?
Проблема в том, что трейс показывает НОЛЬ. Помогите.
Код:
_root.createEmptyMovieClip("imageHolder",1); |
Код:
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth()); |
Скорее всего, проблема в том что ширина измеряется до того как изображение загружено. используй onLoad или SetInterval
|
Постепенно подхожу к цели, но возникла следующая проблема: как достать значение ширины, чтобы использовать его вне функции loadImage?
Код:
function loadImage(mc, img){ |
venegy
ты сначала задай ширину пустому мувиклипу. |
to Mr. Fixit: зачем?
to venegy: ты можешь узнать ширину мувика, только по наступлению события onLoadInit (т.е. картинка твоя не загружается мгновенно), вот и думай исходя из этого. |
Знаю, что это типа муветон, но я просто в _root переменную завожу или в _global. Соотв. пишешь в онЛоадИнит
Код:
_root.imgWidth = target_mc._width; |
Пробовал. Так не получается. Проблема как раз в том, что переменная не принимает нужные значения (onLoadInit отрабатывает позже, чем я обращаюсь к переменной...).
udaaff, ты намекал на что-то... Может, мне структуру функций переделать. Прежняя была такая: loadImage(mc, img) mc - куда кладем картинку, img - имя картинки для загрузки внутри неё - функция для обработчика onLoadInit (которая давала нужный мне параметр - ширину загружаемой картинки) Далее я Вызываю первичную функцию loadImage(mc, img) в цикле для загрузки картинок. Но! Мне нужна ширина картинки. Накапливая ширину каждой загруженной картинки в переменную в этом цикле я получу возможность расставлять картинки одну за другой (в длинную колбасу). Может, изначально логика неверная? Спасибо за участие. |
>>onLoadInit отрабатывает позже, чем я обращаюсь к переменной
Тогда, простите, чью ширину Вы хотите использовать? Картинки-то еще нет Да, логика неверная Цикл выдает несколько тысяч итераций в секунду, т.е. Вы начнете грузить картинки одновременно, а вот время, за которое они будут загружаться, зависит от их веса. Таким образом шестая картинка может загрузиться раньше всех - куда Вы ее поставите, если ширина остальных еще не известна? Выход - грузить картинки по-очереди, не в цикле, а загружая следующую по событию онЛоадКомплит предыдущей. Или вар.2 - загрузить все картинки в одну пачку в невидимом мувике, сделать его видимым и пересчитать координаты всех картинок. Или вар.3 - отображать некие ячейки одного размера, возможно с прелоадером внутри, при окончании загрузки каждой картинки вызывается функция пересчета всей колбасы - получится динамическая такая загрузка :) |
Первый вариант подходит больше всего моему замыслу. Вообще я хочу добиться, чтобы каждая картинка грузилась полностью (с прелоудером) и только после этого начинала подгружаться следующая.
Но как это организовать с помощью онЛоадов? |
Как? Ну это зависит от того, где Вы берете имена (URL) картинок для загрузки... Ну допустим, стандартное решение - у Вас в _root есть массив all_images с урлами, полученный сплитом строки или из хмл-файла. Тогда вот этот блок
Код:
mclListener.onLoadComplete = function()Код:
mclListener.onLoadComplete = function() |
Вложений: 1
Я победил! :victory:
Немного преобразовал вид и с помощью рекурсивного вызова функции loadImage(i) стал грузить картинки по очереди. Красиво работает. Рабочий архив в аттаче. Всем спасибо! |
Твой код, только в упрощенном варианте
Код:
loader(0, 1); |
Цитата:
|
Уточните свой вопрос.
|
Цитата:
вот код: Код:
onClipEvent(load){ |
Вы чтоже, все мувики с картинками прямо в руте создаете? Создавайте в специальном контейнере, его и скроллируйте потом. Можно сверху маску положить нужного размера.
|
спасибо, попробую сделать так=)
|
Можно также использовать свойство мувика scrollRect или компонент ScrollPane.
|
udaaff, не подскажешь как в скроллпейн мувики засовывать НЕ ИЗ библиотеки, а динамически созданные? Не могу найти, уже был такой вопрос. Или предлагаешь приаттачить пустой из библиотеки и в него грузить? Да и полосы прокрутки эти... Неэстетично и куча возни с перерисовкой. Проще свой скролл написать, имхо.
|
ScrollPane, кажется, в качестве contentPath принимает и URL…
|
Принимает, да, но ведь только один? И что с ним дальше делать? :) Здесь грузится много картинок и выстраивается в одну колбасу. Эту колбасу, понятно, надо скроллировать. udaaff предлагает воспользоваться скроллпейн. Мне интересно (теоретически) как? Я вижу только один вариант - пустой мувик из либы (ну если угодно, можно и с урла взять), а в нем уже через content создавать эти самые контейнеры под картинки. Мороки выше крыши - постоянно меняющийся размер контента например.
И по мне так это некрасиво, скроллпейн. Для галереи во всяком случае. |
Порылся в help: "contentPath indicates the content to load into the scroll pane. This value can be a relative path to a local SWF or JPEG file, or a relative or absolute path to a file on the Internet. It can also be the linkage identifier of a movie clip symbol in the library that is set to Export for ActionScript." Т.е. мувик можно грузить только из библиотеки, но ничто потом не мешает сделать, так, как ты и предложил -- загрузить в него контент:
Код:
System.security.allowDomain("http://www.helpexamples.com"); |
все равно не помогает, скроллится только последняя картинка... че делать?
Код:
loader(10, 0, 1); |
В твоем коде никакой логики нету: при вызове функции создается контейнер, ссылка на него записывается в переменную container, и каждый раз ты записываешь в обработчик событий функцию
Код:
function() {Код:
butt.onRollOver = function() {Больше всего меня интересует смысл этой строчки: Код:
delete eval(onEnterFrame); |
Цитата:
поэтому можно немного по-подробнее, в частности про контейнеры. я так думаю их НЕ программно создавать нужно, тогда возникает трудность - нужно будет всегда добавлять субконтейнер при появлении новой картинки... |
Код:
var general:MovieClip = this.createEmptyMovieClip("general", this.getNextHighestDepth()); |
респект, udaaff!!!
огромное спасибо, что помог разобраться |
| Часовой пояс GMT +4, время: 05:39. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.