PDA

Просмотр полной версии : Pop-up баннеры


Idollisimo
10.06.2005, 06:07
Понимаю, что вопрос примитивный, но не дайте пропасть, ибо слишком много зависит у меня от этого долбаного баннера. Обычный поп-ап, но за весь сегодняшний день мне не дали нормальных рецептов по кодированию следующих вещей:
1) Чтобы Pop-up баннер показывался поверх текста
2) Чтобы он был в середине страницы
3) Чтобы кликом по маленькой специальной кнопке его можно было закрыть.
Единсвенное, что мне насоветовали, это напихать в html-страницу и Флэш немеряную кучу JavaScript... Напихал. Все заработало, кроме закрывания баннера... но не нравится. Понимаю, что это метод года 1997-го... что сейчас можно обойтись несколькими грамотными строчками кода. Плз, помогите разобраться! Если есть желание выслать мне исходник (с html-доком, который открывает баннер) на мыло (idol_emergency (животная) rambler.ru), то моей благодарности не будет предела. Заранее спасибо!
P.S. Объяснять всю технологию в 2 предложениях не нужно - это мой первый поп-ап баннер и, скорее всего, мудрёных речей я просто не пойму. Зато пойму наглядные конкретные примеры.

AlDev
10.06.2005, 07:12
юзать div в html, задать ему в style position:absolute. И положить на этот div swf-ку с прозрачным фоном. Причём всё это чудо выровнять по центру. На клик по специальной кнопке ставь getURL('javascript:closebanner();') и пиши в html:

function closebanner()
{
document.getElementById('div_with_flash').innerHTML = '';
}

Для прозрачного фона выставь wmode='transparent'
Всё. Вот и вся идея.

D-MAN
10.06.2005, 15:12
wmode в Опере не пашет кстати

iNils
10.06.2005, 15:16
в 8ой опере уже пашет

Ostgur
11.06.2005, 17:50
<div id="artLayer" style="position:absolute; top:2px;left:2px; visibility: hidden">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,0,0"
ID="artFlash" WIDTH=ШИРИНА HEIGHT=ВЫСОТА>
<param name=movie value="твой_ролик.swf">
<param name=quality value=high>
<param name=bgcolor value=#FFFFFF>
<param name=wmode value=transparent>
</object>
</div>


А на ролике, вроде можно создать кноаку и вней скрипт, поправьте, если я неправ:
on(press){
getURL("javascript:ИМЯ_СЛОЯ.style.visibility='hidden';");
}

winnner
18.01.2007, 01:20
А вот интересно, можно ли такое, и как, из хмл загруженного в клип через линк вызвать? Ато я тут попробовал, не пашет =(

DELer
20.01.2007, 16:47
1) Чтобы Pop-up баннер показывался поверх текста
2) Чтобы он был в середине страницы
3) Чтобы кликом по маленькой специальной кнопке его можно было закрыть.
если баннер планируется для общих сетей(рекламных площадок), а не для какого-то отдельного сайта, все эти вопросы решаются на уровне службы техподдержки сети.. то есть, ты делаешь тольк флеш(рич) баннер с двумя кнопками в одной прописана команда перехода по ссылке, в другой команда закрытия.. обработку этих команд выполняют уже скрипты баннерной сети.. сами команды тоже не везде одинаковы.. большинство на FScommand , у ADBN, например, свои прописки..
скачай легкий баннер http://www.deler.ru/b/Rich/Rich-media7.htm, декомпильни и посмотри кнопки

winnner
21.01.2007, 00:36
Что написать во флеш - не вопрос.
Вопрос в том, возможно-ли сделать это из текста хмл файла загруженного во флеш.
Например: имеется флеш-ролик в котором есть текстовое поле в которое, в свою очередь загружается хмл в котором написано < a href..... Так вот, как по линку из этого хмл текста загрузить в 1. рор-up окно, 2. в слой нтмл другую флешку или нтмл документ, учтывая что браузеры давят рорапы, остаётся невидимый слой, который после загрузки должен стать видимым. И как вы передадите эти команды с помощью хмл? Я, например такой возможности не вижу.

Kikasso
21.01.2007, 00:54
<a href="asfunction:..в хml

winnner
21.01.2007, 03:15
не не пашет что-то.
написал так
<p><a href="asfunction: schowLayer, a">Zeugnis</a></p>в руте:
function schowLayer(arg:String) {
if (arg="a") {
_root.plazeholder._alpha = 100;
} else {
_root.plazeholder._alpha = 0;
}
Где ошибка?

Kikasso
21.01.2007, 04:05
Коды свои обводите, есть кнопочка с решеточкой для этото.

<a href="asfunction:trace,a">Zeugnis</a>
Без пробелов.

winnner
21.01.2007, 05:03
все равно не пашет=(

Kikasso
21.01.2007, 05:30
Коды обведите свои, исходник сюда. Желательно упрощенный.
У меня пашет.var t:TextField = createTextField("my_txt", 1, 200, 100, 500, 28);
t.html = true;
t.htmlText = '<a href="asfunction:trace,работает">кликни</a>';
Это тоже не пашет? Версия флеша какая?

iNils
21.01.2007, 16:51
winnner, для оформления своего кода, надо использовать теги .

winnner
21.01.2007, 16:59
Да нет, Вы не поняли. Текст в это текстовое поле подгружается из хмл документа, в котором написано:

<p><a href="asfunction:schowLayer,a"><font color="#0066FF">Zeugnis</font></a></p>

А во флеше в руте:

function schowLayer(arg:String) {if (arg=a) {
_root.plazeholder._alpha = 100;
trace("1");
} else {
_root.plazeholder._alpha = 0;
trace("0");}
};
stop();

Так вот при на жатии на ссылку "Zeugnis" ничего не происходит, т.е. ровным счетом ни-че-го!
Если пишу:
<p><a href="Zeugnis.swf" target="_blank"><font color="#0066FF">Zeugnis</font></a></p>
то открывает ссылку. (я уж грешным делом подумал, может в парсинге дело), но с обычной ссылкой всё работает.
Может я где-то ошибся, прошу меня поправить.

iNils
21.01.2007, 17:00
Я сказал не , а .

winnner
21.01.2007, 17:01
winnner, для оформления своего кода, надо использовать теги .

Уже исправился :rolleyes:
Понял, не заметил. В дальнейшем учту.

etc
21.01.2007, 17:42
А что за условие if (arg=a) ? Может if (arg=='a') ?

winnner
21.01.2007, 18:11
А что за условие if (arg=a) ? Может if (arg=='a') ?

Да у меня в коде всё правильно, это я когда сюда писал ошибся. :bye:
В коде стоит
function schowLayer(arg:String) {
if (arg == 'a') {
_root.plazeholder._alpha = 100;
trace("1");
} else {
_root.plazeholder._alpha = 0;
trace("0");
}
}
stop();
пробовал и так

schowLayer.onEnterFrame = function(arg:String) {
if (arg == 'a') {
_root.plazeholder._alpha = 100;
trace("1");
} else {
_root.plazeholder._alpha = 0;
trace("0");
}
};
stop();
Не помогает. Правда один раз что-то сработало, но не сразу. Я ткнул в эту ссылку в оне броузера, ничего, как обычно, не произошло, я окно свернул и полез экспериментировать дальше, а потом когда окно снова открыл то увидел что сработало. Блин мистика какая-то. А с каким вариантом уже не вспомнить. И почему не сразу, там ведь никаких циклов нет. Флаш 8.

Kikasso
21.01.2007, 18:45
если такое:
function schowLayer(arg:String) { trace(arg); }
не работает, значит проблема в области видимости.
Попробуте тогда функцию сделать глобальной (после объявления).
_global.schowLayer = schowLayer;

etc
21.01.2007, 18:55
asfunction:_root.showLayer,a

winnner
21.01.2007, 19:03
не работает, значит проблема в области видимости.


В самую точку!!!
Теперь всё работает. Остаётся один вопрос, почему функция расположенная в руте не видна? Странно, не правда-ли.
Спасибо за помощь! :drinks:
Жаль, что сам не подумал так попробовать. :o

Kikasso
21.01.2007, 19:31
Теперь всё работает. Остаётся один вопрос, почему функция расположенная в руте не видна? Странно, не правда-ли.
вы еще и так не пробовали:
function wereAmI():Void{ trace(this); }
_global.wereAmI = wereAmI;
txt.htmlText = '<a href="asfunction:wereAmI">кликни</a>';

либо вызывать как __etc говорит
либо делай функцию глобальной - и будет она доступна отовсюду.

etc
21.01.2007, 19:54
Можно было и _parent вызвать.
Область видимости у asfunction совпадает с областью видимости мувика, содержащего поле. Т.е. _parent ссылается на родителя мувика с полем.

Kikasso
21.01.2007, 20:05
Можно было и _parent вызвать.
Область видимости у asfunction совпадает с областью видимости мувика, содержащего поле. Т.е. _parent ссылается на родителя мувика с полем.
а если там _parent._parent._parent? По мне - лучше такие дела глобализовывать и не мучится. Ну или запустить wereAmI и определиться с местонахождением.

winnner
21.01.2007, 22:01
а если там _parent._parent._parent? По мне - лучше такие дела глобализовывать и не мучится. Ну или запустить wereAmI и определиться с местонахождением.

Полностью согласен! Зачем усложнять код? Чем проще - тем эффективнее.

winnner
22.01.2007, 15:49
Уважаемый Kikasso, может Вы мне подскажете почему когда я подгружаю в мувик swf ку созданную Flashpaper она ведёт себя мягко говоря странно.
Т.е. во первых масштабируется по каким-то непонятным законам, отображается не полностью, а как бы обрезана снизу ну и другие глюки.
Может кто сталкивался? Залезать в Flashpaper овскую свфку что-бы что-то там править нет ни возможности ни времени, их много.
Что посоветуете?

Kikasso
22.01.2007, 15:54
Честно говоря, без понятия. Наверное, лезет поверять Stage.width и прочее, а может версия плеера не совпадает. Не работал ни разу.

winnner
22.01.2007, 16:48
Да она создаётся для 6 плеера, но если не подгружать, а просто открыть, то отображается нормально и в 8 м но маленькая, а если сунуть в хтмл - занимает всё окно. Тут просто у меня проблема в следующем, в моём ролике вначале идёт интро, при нажатии на кнопку "ентер", начинается проигрывание, и если по обычной ссылке в ролике кликнуть то в том-же окне, т.к. броузеры давят попапы, загружается эта свф-ка созданная в флешпапере. При переходе броузера назад снова грузится интро, и конечно меня это не устраивает. Поэтому я и хотел подгружать в ролик, а не загружать отдельно.
Может что посоветуете, ато и так плохо и эдак нехорошо.

winnner
22.01.2007, 16:54
P.S.
Из этих свф можно легко сделать пдф-ы, но это дела не меняет, т.к. они тоже грузятся в то-же окно. Я тут нарыл такой код на асп который вроде должен предлагать загрузку пдф-а, а не его открытие, но он у меня не работает, а просто отображается как текст.

<%
filename=Server.MapPath(Request("file"))
Response.ContentType="application/octet-stream"
Response.Addheader "Content-Disposition", "attachment; filename="&filename
Dim objStream
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open
objStream.LoadFromFile filename
Response.BinaryWrite(objStream.Read)
objStream.Close
Set objStream = Nothing
%>