|
|
|
| День добрый! подскажите почему не работает рекурсивный вызов функции с задержкой?
Вот код
var m = new Array(0,100);
var t = new Array();
var opacityProp = getOpacityProperty();
var elemyes = elemyes;
var elemno = elemno;
function fopacity(elemyes, elemno){
m[0]+=1;
m[1]-=1;
if (opacityProp=="filter")
{
document.getElementById(elemyes).style[opacityProp]="alpha(opacity="+m[0]+")";
document.getElementById(elemno).style[opacityProp]="alpha(opacity="+m[1]+")";
}
else
{
document.getElementById(elemyes).style.opacity = m[0]/100;
document.getElementById(elemno).style.opacity = m[1]/100;
}
t[0] = setTimeout("fopacity()",5);
if (m[0]>99) clearTimeout(t[0]);
}
function getOpacityProperty()
{
if (typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
return 'opacity';
else if (typeof document.body.style.MozOpacity == 'string') // Mozilla 1.6 и младше, Firefox 0.8
return 'MozOpacity';
else if (typeof document.body.style.KhtmlOpacity == 'string') // Konqueror 3.1, Safari 1.1
return 'KhtmlOpacity';
else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
return 'filter';
return false;
}
и сам вызов функции при наведении мышки
(объект находится в другом месте естественно)
onmouseover="fopacity('n1','n2')"
n1 и n2 -
<div id="n1" style='top: 0px; left: 0px; filter: alpha(opacity=0)'><img src="suho1.png"></div>
<div id="n2" style='position:absolute; top: 0px; left: 0px;'><img src="obuch1.png"></div>
|
| |
|
|
|
|
|
|
|
для: Vincento
(24.01.2011 в 12:01)
| | При чем при неоднократном наведении на ссылку скрипт работает как надо, до конца !!!!!??? | |
|
|
|
|
|
|
|
для: Vincento
(24.01.2011 в 12:03)
| | Вы сами дали ответ на свой вопрос.
При наведении на ссылку Вы передаёте функции два аргумента, кои она и обрабатывает.
А используя метод setTimeout, Вы ничего функции не отдаёте - она и не может ничего обработать.
Вам следует изменить подход принципиально.
Текущее состояние ссылки необходимо где-то фиксировать: либо в глобальной переменной, либо в аргументе самой ссылки.
Пример обоих вариантов есть в теме http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=69967 | |
|
|
|
|
|
|
|
для: Абырвалг
(24.01.2011 в 15:45)
| | дело в том ,что если в SettimeOut я отдаю два параметра , к примеру (fopacity('n1','n2')) - то ничего вообще не происходит ((( можете попробовать. Спасибо за ссылку буду изучать!!! | |
|
|
|
|
|
|
|
для: Абырвалг
(24.01.2011 в 15:45)
| | Переделал пример указанный по ссылке под себя:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script>
var Tu, Td, OPC = 10, BRS = (navigator.userAgent.indexOf ('MSIE') >= 0);
var elem;
function f_Up (elem)
{
// alert(elem);
clearTimeout (Td);
var obj = document.getElementById (elem);
if (OPC < 100)
{
if (BRS) obj.style.filter = 'alpha(opacity=' + ++OPC + ')';
else obj.style.opacity = .01 * ++OPC;
Tu = setTimeout (f_Up(elem), 20)
}
else
clearTimeout (Tu)
}
function f_Dn (elem) { clearTimeout (Tu); var obj = document.getElementById (elem);
if (OPC > 1) {if (BRS) obj.style.filter = 'alpha(opacity=' + --OPC + ')'; else obj.style.opacity = .01 * --OPC;
Td = setTimeout (f_Dn(elem), 20)} else clearTimeout (Td)}
</script>
</head>
<body>
<div id="main_d" style="border:1px solid black; width:970px; height: 303px; position:absolute">
<div id="p0" style="background-color: white; width: 970px; height: 303px; filter: alpha(opacity=100); opacity: 1.0; border:1px solid black;"><img src="otbivka.png"></div>
<div id="p1" style=" position:absolute; left:0px; top:0px; background-color: white; width: 970px; height: 100px; filter: alpha(opacity=10); opacity: .0; border:1px solid black;"><img src="avia1.png"></div>
<div id="kn1" style=" position:absolute; width:15px; height:15px; z-index:999; right:173px; bottom:23px; border:1px black solid;" onmouseover="f_Up ('p1')" onmouseout="f_Dn ('p1')"></div>
</body>
|
Опять та же история... где я ошибку допускаю? | |
|
|
|
|
|
|
|
для: Vincento
(24.01.2011 в 22:37)
| | Для тех кому нужно!!!!
методом проб и ошибок установил что правильный вызов функции setTimeout таков
setTimeout ("[название функции]('"+[передаваемый параметр]+"')",[временная задержка])
|
кавычки эти ((( | |
|
|
|
|
|
|
|
для: Vincento
(25.01.2011 в 00:11)
| | Еще замыкание можно сделать. В вашем случае
Tu = setTimeout (function() {
f_Up(elem);
}, 20) ;
|
| |
|
|
|
|
|
|
|
для: Vincento
(25.01.2011 в 00:11)
| | Дебагером (отладчиком) javascript-кода пользуйтесь и не будет таких проблем. | |
|
|
|