Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.06.2012, 13:31
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 1  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
Question слайдер с несколькими вариантами галерей (XML)

Есть XML-слайдер (см. вложенный исходник).
Необходимо сделать так, чтобы по нажатию кнопок подгружались разные xml файлы (то есть, в зависимости от нажатой кнопки, была видна каждый раз разная галерея).
Например, нажимаем кнопку Auto ID - подгружается файл datas.xml. Нажимаем кнопку "Торговое оборудование" - подгружается файл datas1.xml.

Как это лучше реализовать?
Вложения
Тип файла: rar menu3d.rar (3.73 Мб, 49 просмотров)

Старый 22.06.2012, 13:57
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 2  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
Добавила пока следующее:

Код AS3:
btn1.addEventListener(MouseEvent.CLICK,btn1Clicked);
btn2.addEventListener(MouseEvent.CLICK,btn2Clicked);
// btn3.addEventListener(MouseEvent.CLICK,btn3Clicked);
// btn4.addEventListener(MouseEvent.CLICK,btn4Clicked);
// btn5.addEventListener(MouseEvent.CLICK,btn5Clicked);
// btn6.addEventListener(MouseEvent.CLICK,btn6Clicked);
 
function btn1Clicked(e:MouseEvent):void {	
       loadXML("datas.xml");  
     }
function btn2Clicked(e:MouseEvent):void {	
       loadXML("datas1.xml");  
     }
Вроде, частично получилось, но если я уже нажала кнопку btn1, но нажатия на кнопку btn2 ни к чему не приводят... И наоборот: если я загрузила XML по второй кнопке btn2, то уже никак нельзя переключиться на первый datas.xml

Старый 22.06.2012, 14:07
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 3  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
приведите код loadXML.

вероятно он единожды сохраняет загруженную XML и дальше не реагирует.
__________________
adobe AS3 manual

Старый 22.06.2012, 14:28
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 4  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
Это?

Код AS3:
function loadXML(file:String):void{
	var xmlLoader:URLLoader = new URLLoader();
	xmlLoader.load(new URLRequest(file));
	xmlLoader.addEventListener(Event.COMPLETE, parseXML);
}
До меня пока не доходит, что конкретно нужно изменить...


Последний раз редактировалось maritca; 22.06.2012 в 14:29. Причина: UPD
Старый 22.06.2012, 14:36
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 5  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Ну, здесь всё хорошо. А что делает ф-ция parseXML ?
__________________
adobe AS3 manual

Старый 22.06.2012, 14:43
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 6  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
На всякий случай, копирую вместе с ф-цией loadImages:

Код AS3:
function parseXML(e:Event):void{
xml = new XML(e.target.data);
totalImages = xml.children().length();
loadImages();
}
 
function loadImages():void{
for(var i:int = 0; i<totalImages; i++){
 var loader:Loader = new Loader();
 loader.load(new URLRequest("images/"+String(xml.children()[i].@src)));
 images.push(loader);
 imagesLink.push(xml.children()[i].@link);//-------------------------------------------
 imagesText.push(xml.children()[i].@text);//-------------------------------------------
 loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
}
}


Последний раз редактировалось maritca; 22.06.2012 в 14:48.
Старый 22.06.2012, 14:47
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 7  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
как вижу у вас заполняется массив images, и они далее добавляются в отображение.
А при повторной загрузке картинки всё еще остаются, и массив всё еще со старыми данными.

ваша задача - перед каждой загрузкой удалить картинки с визуального отображения, и очистить массив.
- скажите где располагается images? (где делается addChild для его элементов)
__________________
adobe AS3 manual

Старый 22.06.2012, 14:57
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 8  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
Гм... давайте я приведу весь код целиком...

Код AS3:
import com.greensock.*;
import com.greensock.easing.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.navigateToURL;
 
var xml:XML;
var images:Array = new Array();
var imagesLink:Array = new Array();//------------------------------------
var imagesText:Array = new Array();//------------------------------------
var totalImages:Number;
var nbDisplayed:Number =3;
var imagesLoaded:int = 0;
var slideTo:Number = 0;
var imageWidth = 131; 
 
var container_mc:MovieClip = new MovieClip();
slider_mc.addChild(container_mc);
container_mc.mask = slider_mc.mask_mc;
 
function loadXML(file:String):void{
	var xmlLoader:URLLoader = new URLLoader();
	xmlLoader.load(new URLRequest(file));
	xmlLoader.addEventListener(Event.COMPLETE, parseXML);
}
 
function parseXML(e:Event):void{
xml = new XML(e.target.data);
totalImages = xml.children().length();
loadImages();
}
 
function loadImages():void{
for(var i:int = 0; i<totalImages; i++){
 var loader:Loader = new Loader();
 loader.load(new URLRequest("images/"+String(xml.children()[i].@src)));
 images.push(loader);
 imagesLink.push(xml.children()[i].@link);//-------------------------------------------
 imagesText.push(xml.children()[i].@text);//-------------------------------------------
 loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
}
}
 
function onProgress(e:ProgressEvent):void{
loading_txt.text = "Loading " + imagesLoaded + " / " + totalImages;
}
 
function onComplete(e:Event):void{
imagesLoaded++;
if(imagesLoaded == totalImages){
 loading_txt.text = "";
 createImages();
}
}
 
function createImages():void{
for(var i:int = 0; i < images.length; i++){
 var bm:Bitmap = new Bitmap();
 var holder:MovieClip=new MovieClip(); //------------------------------------
 bm = Bitmap(images[i].content);
 bm.smoothing = true;
 holder.y= i*imageWidth;//------------
 holder.addChild(bm);//--------------
 //bm.y = i*imageWidth;
 //var currTxt:imText=new imText();
 //currTxt.txt.text=imagesText[i];
 //currTxt.y=50;
 //holder.addChild(currTxt);
 holder.addEventListener(MouseEvent.CLICK,goSite);
 holder.id=i;
 container_mc.addChild(holder); //--------------------------
}
}
 
function goSite(e:MouseEvent) {
var mc:MovieClip=MovieClip(e.target);
navigateToURL(new URLRequest(imagesLink[mc.id]));
}
 
previous_btn.addEventListener(MouseEvent.CLICK,slideLeft);
next_btn.addEventListener(MouseEvent.CLICK,slideRight);
 
function slideLeft(e:MouseEvent):void{
slideTo -= nbDisplayed;
slideContainer();
}
 
function slideRight(e:MouseEvent):void{
slideTo += nbDisplayed;
slideContainer();
}
 
function slideContainer():void{
if(totalImages - slideTo < nbDisplayed)
 slideTo = totalImages - nbDisplayed;
if(slideTo < 0)
 slideTo = 0;
 
TweenLite.to(container_mc,.5,{y:-slideTo*imageWidth,ease:Quad.easeIn});
}
 
//-------------------------------------------------------------------------
//private function setUpListeners():void {
		 btn1.addEventListener(MouseEvent.CLICK,btn1Clicked);
		 btn2.addEventListener(MouseEvent.CLICK,btn2Clicked);
		// btn3.addEventListener(MouseEvent.CLICK,btn3Clicked);
		 //btn4.addEventListener(MouseEvent.CLICK,btn4Clicked);
		 //btn5.addEventListener(MouseEvent.CLICK,btn5Clicked);
		// btn6.addEventListener(MouseEvent.CLICK,btn6Clicked);
//}
 
function btn1Clicked(e:MouseEvent):void {	
	       loadXML("datas.xml");		
      }
function btn2Clicked(e:MouseEvent):void {	
	       loadXML("datas1.xml");		
      }
Может, можно каким-либо образом просто добавить функцию отмены предыдущего клика/загрузки xml в конце, где function btnClicked?

Старый 22.06.2012, 15:15
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 9  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
в ф-ции createImages в самом начале пропишите:

Код AS3:
while (container_mc.numChildren) {
    container_mc.removeChildAt(0);
}
а в ф-ции loadImages в самом начале строку:
Код AS3:
images = null;
__________________
adobe AS3 manual


Последний раз редактировалось strangedk; 22.06.2012 в 15:21. Причина: ошибся, не holder а container_mc
Старый 22.06.2012, 15:48
maritca вне форума Посмотреть профиль Отправить личное сообщение для maritca Найти все сообщения от maritca
  № 10  
Ответить с цитированием
maritca

Регистрация: Mar 2012
Сообщений: 12
Сделала, получила
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at FlowerMenu/loadImages()
at FlowerMenu/parseXML()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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