Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

JavaScript, глюк с clearInterval

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> JavaScript, глюк с clearInterval
Имя
Сообщение << Старые топики   Новые топики >>
JavaScript, глюк с clearInterval - 2008-06-20 12:55:46.443333   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
Всем привет!

есть скрипт:

quote:


&lt;script type="text/javascript"&gt;
var interval_id;
var browserdetect;

function initialize(){

browserdetect=cartwindow.filters? "ie" : typeof(cartwindow.style.MozOpacity) == "string" ? "mz" : "";

if (browserdetect == "ie")
{
cartwindow.style.pixelLeft=document.body.scrollLeft+document.body.clientWidth-cartwindowtable.offsetWidth;
cartwindow.style.pixelTop=document.body.scrollTop+document.body.clientHeight-cartwindowtable.offsetHeight;
}
else
{
cartwindow.style.left=(document.body.scrollLeft+document.body.clientWidth-cartwindowtable.offsetWidth) + "px";
cartwindow.style.top=(document.body.scrollTop+document.body.clientHeight-cartwindowtable.offsetHeight) + "px";
}
FadeCartWindow();
}

function fill_yellow(id)
{
document.getElementById(id).style.background = "#FFCC00";
initialize();
}

function FadeCartWindow()
{
cartwindow.style.visibility = 'visible';
interval_id=setInterval("FadeCartWindowLevel()",150);
}

function FadeCartWindowLevel()
{
if (browserdetect == "ie")
{cartwindow.filters.alpha.opacity+=10;}
else if (browserdetect == "mz")
{cartwindow.style.MozOpacity-=.1;}
else
{cartwindow.style.visibility = 'hidden';}

if ((cartwindow.style.MozOpacity == 0.0)||(cartwindow.filters.alpha.opacity == 100))
{
clearInterval(interval_id);
interval_id=setInterval("InstantHide()",1000);

}
}

function InstantHide()
{
clearInterval(interval_id);
cartwindow.style.visibility = 'hidden';
}

&lt;/script&gt;


На страничке есть кнопка, при нажатии на которую плавно должно всплыть окошечеко (div элемент) и исчезнуть.
Первый раз все срабатывает как надо, а последующие нажатия на кнопку приводят к мгновенному появлению и исчезанию всплывающего окна.

Все дело в интервалах, стопудов. Я использую clearInterval(), но что-то от него толку нуль. Во время выполнения скрипта браузер не ругается на ошибки.

Что это за глюк такой? Или у меня руки искривились?


PS Добавил скрипт в тэги цитата, чтобы можно было сделать выделение жирным.
Post #: 1
RE: JavaScript, глюк с clearInterval - 2008-06-20 14:11:05.946666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
У тебя проблема в следующих строках:
quote:

if ((cartwindow.style.MozOpacity == 0.0)||(cartwindow.filters.alpha.opacity == 100))
{
clearInterval(interval_id);
interval_id=setInterval("InstantHide()",1000);
}

жирным выделилм причину. Если убрать это, то в опере все отлично работает.
Post #: 2
RE: JavaScript, глюк с clearInterval - 2008-06-20 14:36:40.823333   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
ВСЕ

проблема решена. забыл добавить сброс прозрачности но 0 для всплывающего окна. :)

Орб, то что ты выделел жирным вообще никак не влияло на глюк


Post #: 3
RE: JavaScript, глюк с clearInterval - 2008-06-20 15:01:26.496666   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000

quote:

ORIGINAL: ZneP

ВСЕ

проблема решена. забыл добавить сброс прозрачности но 0 для всплывающего окна. :)

Орб, то что ты выделел жирным вообще никак не влияло на глюк

Весьма странно. В каком браузере тестил?
Вот скрипт, который работает в опере 9.5
&lt;script&gt; var interval_id; var browserdetect; function initialize(){ browserdetect=cartwindow.filters? "ie" : typeof(cartwindow.style.MozOpacity) == "string" ? "mz" : ""; /*if (browserdetect == "ie") { cartwindow.style.pixelLeft=document.body.scrollLeft+document.body.clientWidth-cartwindowtable.offsetWidth; cartwindow.style.pixelTop=document.body.scrollTop+document.body.clientHeight-cartwindowtable.offsetHeight; } else { cartwindow.style.left=(document.body.scrollLeft+document.body.clientWidth-cartwindowtable.offsetWidth) + "px"; cartwindow.style.top=(document.body.scrollTop+document.body.clientHeight-cartwindowtable.offsetHeight) + "px"; } */ FadeCartWindow(); } function fill_yellow(id) { document.getElementById(id).style.background = "#FFCC00"; initialize(); } function FadeCartWindow() { cartwindow.style.visibility = 'visible'; interval_id=setInterval("FadeCartWindowLevel()",1050); } function FadeCartWindowLevel() { if (browserdetect == "ie") {cartwindow.filters.alpha.opacity+=10;} else if (browserdetect == "mz") {cartwindow.style.MozOpacity-=.1;} else {cartwindow.style.visibility = 'hidden';} if ((cartwindow.style.MozOpacity == 0.0)) { clearInterval(interval_id); interval_id=setInterval("InstantHide()",1000); } } function InstantHide() { clearInterval(interval_id); cartwindow.style.visibility = 'hidden'; } &lt;/script&gt; &lt;div id='cartwindow' style="visibility:hidden;"&gt;asdf &lt;/div&gt; &lt;input type='button' onClick='initialize();'&gt;
Post #: 4
RE: JavaScript, глюк с clearInterval - 2008-06-20 15:07:36.523333   
ZneP

Сообщений: 910
Оценки: 0
Присоединился: 2006-08-21 16:11:47
тестил в Опере 9,27, лиса 2, осел 6

твой скрипт только один раз корректно отработает появление окна, так как ты не сбросил параметр cartwindow.style.MozOpacity
у тебя cartwindow.style.MozOpacity доходит до 0,0 и окно скрывается, последующие вызовы функции initialize() просто будут отображать и прятать окно, без эффекта прозрачности
Post #: 5
Страниц:  [1]
Все форумы >> [Веб-программинг] >> JavaScript, глюк с clearInterval







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.