Просмотр полной версии : Проблема со слайдшоу
Есть слайдшоу, которое нормально работает на локальном компе, но упорно не хочет запускаться c первого раза на сайте, открываешь страницу - оно не запускается, если обновить (F5) все работает
Путь к картинкам берется из XML-файла, последовательность картинок случайная, только всегда в начале должна запускаться первая картинка
Прошу Вашей помощи
Архив с исходником прилагается (CS4, Actionscript 1.0/2.0)
проверял на хостинге, все работает, какой браузер, как вставляете?
rainbowrussia
23.05.2010, 02:16
Открыть не смог, в самом файле увидел только код загрузки XML, кода показа картинок не увидел. Быть может код показа запускается раньше чем срабатывает onLoad, когда массив еще пуст. По крайней мере симптомы очень похожи на это.
проверял на хостинге, все работает, какой браузер, как вставляете?
IE, Firefox, Opera
вставка с помощью SwfObject
Открыть не смог, в самом файле увидел только код загрузки XML, кода показа картинок не увидел. Быть может код показа запускается раньше чем срабатывает onLoad, когда массив еще пуст. По крайней мере симптомы очень похожи на это.
код вывода изображений
var intervalId:Number;
var showTime:Number = 5000; //Время показа слайда
var speed:Number = 5; //Скорость показа
container._alpha = 0;
var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();
var i:Number = 0; //Счетчик
function slideShow() {
mcLoader.loadClip(images[i].path,container);//Загружаем фото
loadListener.onLoadInit = function() {
fade(container);//Плавный показ
i = random(photoCount);
if (i == 0) {
i = 1;
}
};
}
intervalId = setInterval(this, "slideShow", showTime);//Запускаем непрерывный показ
mcLoader.addListener(loadListener);
slideShow(i);//Первый запуск
function fade(mc) {
container._alpha = 0;
title_mc._alpha = 0;
mc.onEnterFrame = function() {
this._alpha += speed;
title_mc._alpha += speed;
if (this._alpha>=100) {
delete this.onEnterFrame;
}
};
}
stop();
rainbowrussia
23.05.2010, 17:58
Если я правильно понял у вас происходит следующее:
1) запрос на сервер для получения XML файла
2) запуск слайдшоу, не дожидаясь события xml onLoad, i = 0
3) как результат в первый раз (когда xml не в кеше браузера) запуск пустого слайдшоу
slideShow(i) нужно делать после того как обработали xml в событии onLoad
Если я правильно понял у вас происходит следующее:
1) запрос на сервер для получения XML файла
2) запуск слайдшоу, не дожидаясь события xml onLoad, i = 0
3) как результат в первый раз (когда xml не в кеше браузера) запуск пустого слайдшоу
slideShow(i) нужно делать после того как обработали xml в событии onLoad
код с отображением изображений осуществляется в 5 кадре, считываение же xml - в первом
rainbowrussia
24.05.2010, 03:20
код с отображением изображений осуществляется в 5 кадре, считываение же xml - в первом
В этом и проблема - без stop() в предыдущих кадрах пятый кадр может начать воспроизводиться до того как загрузятся XML данные. Сделайте stop() в первом кадре, где грузите XML, а в обработчике onLoad в конце процедуры сделайте gotoAndStop(5), либо совместите все в одном кадре, и в конце процедуры onLoad сделайте slideShow(i).
В этом и проблема - без stop() в предыдущих кадрах пятый кадр может начать воспроизводиться до того как загрузятся XML данные. Сделайте stop() в первом кадре, где грузите XML, а в обработчике onLoad в конце процедуры сделайте gotoAndStop(5), либо совместите все в одном кадре, и в конце процедуры onLoad сделайте slideShow(i).
сделал как Вы посоветовали - результат тот же...
trace проверил нормально ли отрабатывает xml - здесь все ок, массив заполняется как надо
думаю здесь дело в картинках, которые напросто не успевают загрузиться
как можно реализовать предварительную подгрузку изображений?
rainbowrussia
24.05.2010, 19:33
У вас и так очередное изображение предварительно загружается, думаю дело не в этом. Выложите пожалуйста весь код в каждом кадре, который получился после применения совета "Сделайте stop() в первом кадре, где грузите XML, а в обработчике onLoad в конце процедуры сделайте gotoAndStop(5)". И дайте ссылку в инете, по которой у вас со второго раза только все срабатывает.
У вас и так очередное изображение предварительно загружается, думаю дело не в этом. Выложите пожалуйста весь код в каждом кадре, который получился после применения совета "Сделайте stop() в первом кадре, где грузите XML, а в обработчике onLoad в конце процедуры сделайте gotoAndStop(5)". И дайте ссылку в инете, по которой у вас со второго раза только все срабатывает.
сделал по Вашему методу со стопом в первом кадре и переходе на 5, но он не сработал при эмуляции низкоскоростного соединения во флешплеере
после я переделал код и слайдшоу стало работать даже при самой низкоскоростной передаче (Simulate Download, 14.4)
итак, код первого фрейма:
var images:Array = new Array();//Массив для хранения данных
var photoCount:Number;
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("images.xml");//Загружаем данные
myXML.onLoad = function(success) {
if (success) {
all = myXML.firstChild.childNodes;
photoCount = all.length;
for (i=0; i<photoCount; i++) {
images.push({path:all[i].attributes.path});//Заполняем массив
}
} else {
}
};
пятого:
var intervalId:Number;
var showTime:Number = 5000; //Время показа слайда
var speed:Number = 5; //Скорость показа
container._alpha = 0;
var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();
var i:Number = 0; //Счетчик
mcLoader.addListener(loadListener);
slideShow(i); //Первый запуск
function slideShow() {
mcLoader.loadClip(images[i].path, container);//Загружаем фото
}
loadListener.onLoadComplete = function() {
fade(container); //Плавный показ
i = random(photoCount);
if (i == 0) {
i = 1;
}
intervalId = setTimeout(slideShow, showTime);
}
function fade(mc) {
container._alpha = 0;
mc.onEnterFrame = function() {
this._alpha += speed;
if (this._alpha>=100) {
delete this.onEnterFrame;
}
}
}
stop();
в локале все работает как часы, но почему-то на хосте не хочет... может дело во вставке флеша на страницу?
ссылка http://tangodance.by/gallery/
rainbowrussia
25.05.2010, 18:46
При таком коде у вас 5й кадр начнет играться раньше, чем загрузятся данные из XML, а там и photoCount не определен и images[i] тоже.
Код в первом фрейме вот такой делали?
var images:Array = new Array();//Массив для хранения данных
var photoCount:Number;
myXML = new XML();
myXML.ignoreWhite = true;
myXML.onLoad = function(success) {
if (success) {
all = myXML.firstChild.childNodes;
photoCount = all.length;
for (i=0; i<photoCount; i++) {
images.push({path:all[i].attributes.path});//Заполняем массив
}
gotoAndPlay(5);
} else {
}
};
myXML.load("images.xml");//Загружаем данные
stop();
если не работает то gotoAndPlay(5) замените на _root.gotoAndPlay(5)
Обратите внимание, я load перенес ниже определения события onLoad на всякий случай.
спасибо, перестановка помогла :drinks:
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.