Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Использование setInterval и clearInterval при создании flash-презентации (http://www.flasher.ru/forum/showthread.php?t=97267)

Александр-HIMик 17.06.2007 07:04

Использование setInterval и clearInterval при создании flash-презентации
 
У меня следующая конструкция:
1 - Меню. Основа. В нём 3 кадра: обычное меню, с первым развернутым пунктом меню, со вторым развёрнутым пунктом. В него по дефолту подгружаются внешние файлы, а-ля
Код:

loadMovieNum("dyn_main.swf",1);
и активизируются:
Код:

on(press){
        _level1.gotoAndStop("divan");
        }

2 - Внешний файл. Содержит описания товаров разбитые на несколько кадров. Например (3 кадра) диван: описание, чертежи, фото. Каждый товар показывается в виде презентации - идёт серия из кадров, в конце описания товара идёт остановка. Пользователь должен имееть право перейти на любой кадр в любой момент времени, даже когда кадры сменяют друг друга.
Для этого существует менюшка (внутри этого же внешнего файла), с помощью которой данная задача реализуется, а-ля
Код:

on(press){
        gotoAndStop("divan_info");}

3 - Запускаю презентацию следующим образом:
1) В 1м кадре ставится
Код:

function goToNext(){
            gotoAndStop(nextFrame());
        }
        var intervalID:Number = setInterval(goToNext, 2000);

2) в последнем (в данном случае 3-ем) кадре ставится
Код:

clearInterval(intervalID);
Для того чтобы пользователь мог просматривать статичные кадры, я ввожу переменную, перед просмотром презентации
Код:

var pres:Boolean = true;
а потом ставлю условие
Код:

if (b == true) {
        var intervalID:Number = setInterval(goToNext, 2000);
        }

в конце просмотра я ставлю
Код:

pres = false;
таким образом убирая запуск презентации, в случае если пользователь вернётся на её первый кадр.
Надеюсь хоть кто-нибудь понял что я имею в виду.

Проблема вот в чём -- когда пользователь убегает на другой товар через меню 1, интервал не уничтожается даже если на кнопку перехода на другой товар вешается clearInterval. Т.е. презетация шла на товаре, вдруг она берёт и перекидывается на загруженный файл имеющий совершенно иной смысл, который не нуждается в покадровом просмотре, и начинает покадрово показывать его.

Получается, что только досмотрев презентацию пользователь сможет "безболезненно" и3учать детали товара, ибо только тогда срабатывает clearInterval. Что посоветуете?

Double 17.06.2007 09:29

сударь, Ваш синтаксис - упадочный стиль, эпоха Керенского! используйте setInterval для многократного запуска функции. одноразовый аналог - setTimeout (параметры те же). соответственно у него нет ID и нет необходимости его очищать.

Александр-HIMик 17.06.2007 10:34

Пока воссоздавал пример, понял что имею два ключевых момента:
1) когда пользователь просматривает полностью презентацию по товару, возможность дальшейшей презентации других товаров отключается ибо по окончании какой-либо презентации
Код:

pres = false;
. Можно и не вводить данную переменную, просто ставить на кнопки перехода по кадрам clearInterval. Для встроенную в загружаемый ролик навигацию это работает (см. файл), а вот в главной навигации -- фиг!
2) если пользователь не досмотрев презентацию переключается на другой товар, то интервал не вычищается и продолжает работать.

http://www.dark-abakan.nm.ru/sample.zip

К вопросу о стиле. В данном случае это что-то меняет?

Double 17.06.2007 20:03

в данном случае? возможно. интервал не очищается из-за проблем с относительной адресацией. конструкция _level1 - это очень круто, но не совсем понятно ГДЕ. та же история и с ID интервала. я уверен.

тут Вам никто не поможет. в таком синтаксисе разобраться тяжело. когда этот код присутствует фрагментарно сказать практически вообще ничего нельзя. по вашим словам в первом кадре стоит gotoAndStop(nextFrame), а далее сразу идёт речь о третьем кадре. про второй нам самим нафантазировать?..

Александр-HIMик 18.06.2007 06:20

Сложно разобраться в синтаксисе -- пожайлуйста, вот и исходники, так сказать.
В таком случае как-то глобально можно вычистить интервалы или нет?

iNils 18.06.2007 07:58

Цитата:

Сообщение от Double
одноразовый аналог - setTimeout (параметры те же). соответственно у него нет ID и нет необходимости его очищать.

Это не верно. У setTimeout есть также id и его также можно очистить, но только до момента срабатывания, дальше он сам очищается. Используется или clearInterval(id) или clearTimeout(id), разницы нет.

Double 18.06.2007 08:08

спасибо. подозрения были, но точно не знал. проверить как-то не возникало необходимости.


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

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