Форум 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)
-   -   Медленное исчезновение блока(флешки) (http://www.flasher.ru/forum/showthread.php?t=187566)

Marakaya 21.11.2012 10:25

Медленное исчезновение блока(флешки)
 
Доброго всем времени суток. У меня такая ситуация. Есть заставка для сайта во флеше, она проигрывается в div'е с z-index: 9999, когда флешка заканчивается, она посылает getUrl("javascript:closeblock();"), т.е. закрывает этот блок и появляется сайт. Но. Он появляется быстро, а нужно плавное появление. Посему вопрос: как этому блоку через флеш передать сначала изменение его прозрачности со 100 до 0 за 2-3 секунды, а потом только послать getUrl("javascript:closeblock();") ??? Есть ли во флеше такая функция как изменение прозрачности самого ролика, а не какого-то определенного элемента? Подскажите, как решить этот вопрос?

Wolsh 21.11.2012 10:57

Зачем Вам весь ролик, изменяйте прозрачность Main, а саму флэшку в страницу вставляйте с WMODE="transparent". Только этот режим глючный, я бы опасался.

Hauts 21.11.2012 11:17

Раз getUrl, значит похоже, что ас2.

Там, где стоит getURL, поставьте такое:
Код AS1/AS2:

stop();
this.onEnterFrame = function(){
    _root._alpha -= 5;
    if(_root._alpha <= 0){
        getURL("javascript:closeblock();");
        _root._visible = false;
        delete this.onEnterFrame;
    }
}

Возможно поможет.

Marakaya 21.11.2012 11:34

Код AS1/AS2:

stop ();
Stage.removeListener(this);
_root.play();
this.onEnterFrame = function(){
    _root._alpha -= 5;
    if(_root._alpha <= 0){
        getURL("javascript:closeblock();");
        _root._visible = false;
        delete this.onEnterFrame;
    }
}

Вот какой код получился после добавления, все осталось как есть((. Подскажите ещё варианты, или может я где-то ошибся?

Добавлено через 2 минуты
Добавлю ещё для ясности. На сцене 1 кадр, в нем лежит мувклип, в котором 180кадров, и вот в последнем и вставляю этот код.

Wolsh 21.11.2012 11:45

У Вас версия языка какая установлена в проекте?
Здесь компот из AS2 и AS3.

КорДум 21.11.2012 11:46

Да нет, все это as1. Так что в том разделе теме самое место.

Wolsh 21.11.2012 13:18

Переехали)

Marakaya 21.11.2012 13:18

Очень сильно извиняюсь, наверное это AS2, можно тему как-то переместить в другую ветку?
Упс, написал за секунду до перемещения темы. Так что мне поделать с кодом то ? Т_Т

Hauts 21.11.2012 13:27

Код AS1/AS2:

stop();
this.onEnterFrame = function(){
    _root._alpha -= 5;
    if(_root._alpha <= 0){
        getURL("javascript:closeblock();");
        _root._visible = false;
        delete this.onEnterFrame;
    }
}

Поставьте в последнем кадре мувиклипа, в котором 180 кадров.

Marakaya 21.11.2012 13:47

Не помогло ( может быть это - getURL("javascript:closeblock();"); кадров через 50 вставить?

Hauts 21.11.2012 13:52

А вы как тестируете?

Marakaya 21.11.2012 14:33

Копирую ролик на ftp, и заново захожу на сайт.

Hauts 21.11.2012 14:40

Ну а локально вы не можете посмотреть, что происходит, когда ролик доигрывает до последнего кадра? Запускаете, смотрите, что происходит.

На сайте ролик может закэшироваться, кстати. Чистите кэш браузера, прежде, чем тестировать.

И не забудьте про wmode = transparent для ролика, иначе не будет исчезать.

Marakaya 21.11.2012 14:49

Совсем не то получается, чувствую тут реализация только через javascript.
Разложу ещё раз всё по полочкам.
1. файл Index.php - этим скриптом я вывожу ролик, который растягивает его на весь экран. Ролик проигрывается на черном фоне, все отлично.

PHP код:

<?php
$session 
= JFactory::getSession();
$first = $session->get('first', 1);

if (
$first){
?>

<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
html{
overflow:hidden;
}
#new2012{
position:absolute;
z-index:10000;
height: 100%;
width:100%;
background:#fff;
}
#new2012wrap{
position:absolute;
top:0;
right:0;
width:100%;
z-index:9999;
background:#fff;
}
</style>
<script type="text/javascript">
window.addEvent('domready', function() {
resizeflash();
window.onresize= resizeflash;
});

function resizeflash()
{
var elwrap = document.getElementById('new2012wrap');
var elclose = document.getElementById('close');
var el = document.getElementById('new2012');

var w = getClientWidth();
var h = getClientHeight();

var w = getClientWidth();
var fl = document.getElementById('fl');
fl.setAttribute("width", w);
fl.setAttribute("height", h);

elclose.style.left = (w-elclose.clientWidth)/2+'px';

elwrap.style.left = '0px';
el.style.left = '0px';

elwrap.style.width = w+'px';
elwrap.style.height = h+'px';
el.style.width = w+'px';
el.style.height = h+'px';
}
function getClientHeight()
{

return document.compatMode=='CSS1Compat' ? (document.documentElement.clientHeight):document.body.clientHeight;
}
function getClientWidth()
{
return document.compatMode=='CSS1Compat' ? document.documentElement.clientWidth:document.body.clientWidth;
}
function closeblock()
{

var b = document.getElementsByTagName('html');

b[0].style.overflow = 'hidden';
var elwrap = document.getElementById('new2012wrap');
elwrap.style.display = 'none';
}

</script>

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

Hauts 21.11.2012 14:55

Ваш этот код для ресайза флэшки? Вы серьезно? Используйте SWFObject для того, чтобы вставить флэшку на страницу и вставляйте ее в див, который имеет 100-процентные размеры и лежит поверх всего остального. Не нужно никаких getClientHeight() и других заморочек.

Marakaya 21.11.2012 15:01

Можно поподробнее рассказать про SWFObject ? Тут даже код не совсем для ресайза а для того чтобы она проигровалась только 1 раз и да, поверх всего. Я в этом не про, нашел на одном сайте и сделал...

Hauts 21.11.2012 15:04

Вложений: 1
Вот, смотрите и разбирайтесь.

Marakaya 22.11.2012 08:51

Цитата:

Сообщение от Hauts (Сообщение 1105424)
Вот, смотрите и разбирайтесь.

Большое спасибо за код! Очень все помогло, но вот один вопрос. Как я понял этот код Stage.scaleMode = "exactfit" - для масштабирования на всю страницу. Когда его прописываю - флешка тянется полностью и измененяет пропорций - получается ужас. Раньше тянулся только задний фон, который заполнял всю область страницы, а теперь и флешка с ним. А без этого кода Stage.scaleMode = "exactfit" флешка смещается в правую сторону http://bayakov.kz/sdvig.jpg. Что делать ?)

Hauts 22.11.2012 09:04

Если вам не нужно масштабировать флэшку, но нужно ею прятать сайт, то можно попробовать так:

Код AS3:

Stage.scaleMode = "noscale";
Stage.align = ""
Stage.showMenu = false;

И нарисовать черный прямоугольник 3000 на 3000 пикселей на самом нижнем слое флэшки.

Marakaya 22.11.2012 09:27

Всё классно получается, но почему то флешка всё равно справа. http://bayakov.kz/sdvig2.jpg

Hauts 22.11.2012 11:26

Хм. Нужно уже смотреть, что там внутри флэшки.

Marakaya 19.12.2012 15:32

Когда ставлю wmode=transparent флешка начинает ужасно тормозить. Можно ли убрать этот параметр, а потом в самой флешке, в конце ролика вставить функцию, которая бы присваивала этой строке параметр wmode=transparent ? Или это из сферы фантастики ?)

mooncar 19.12.2012 15:52

Нет, "на лету" менять wmode нельзя.

Marakaya 19.12.2012 15:54

Значит или тормоза, или резкое закрытие блока? Другого не дано?

mooncar 19.12.2012 15:57

В рамках вашего вопроса - да.
Попробуйте оптимизировать флешку.


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

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