PDA

Просмотр полной версии : Медленное исчезновение блока(флешки)


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, поставьте такое:

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
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
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
$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
Вот, смотрите и разбирайтесь.

Marakaya
22.11.2012, 08:51
Вот, смотрите и разбирайтесь.

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

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


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
В рамках вашего вопроса - да.
Попробуйте оптимизировать флешку.