Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SetTimeuot - проблема
 
 автор: Vincento   (24.01.2011 в 12:01)   письмо автору
 
 

День добрый! подскажите почему не работает рекурсивный вызов функции с задержкой?

Вот код

           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:03)   письмо автору
 
   для: Vincento   (24.01.2011 в 12:01)
 

При чем при неоднократном наведении на ссылку скрипт работает как надо, до конца !!!!!???

  Ответить  
 
 автор: Абырвалг   (24.01.2011 в 15:45)   письмо автору
 
   для: Vincento   (24.01.2011 в 12:03)
 

Вы сами дали ответ на свой вопрос.
При наведении на ссылку Вы передаёте функции два аргумента, кои она и обрабатывает.

А используя метод setTimeout, Вы ничего функции не отдаёте - она и не может ничего обработать.

Вам следует изменить подход принципиально.
Текущее состояние ссылки необходимо где-то фиксировать: либо в глобальной переменной, либо в аргументе самой ссылки.
Пример обоих вариантов есть в теме http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=69967

  Ответить  
 
 автор: Vincento   (24.01.2011 в 16:34)   письмо автору
 
   для: Абырвалг   (24.01.2011 в 15:45)
 

дело в том ,что если в SettimeOut я отдаю два параметра , к примеру (fopacity('n1','n2')) - то ничего вообще не происходит ((( можете попробовать. Спасибо за ссылку буду изучать!!!

  Ответить  
 
 автор: Vincento   (24.01.2011 в 22:37)   письмо автору
 
   для: Абырвалг   (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   (25.01.2011 в 00:11)   письмо автору
 
   для: Vincento   (24.01.2011 в 22:37)
 

Для тех кому нужно!!!!

методом проб и ошибок установил что правильный вызов функции setTimeout таков


setTimeout ("[название функции]('"+[передаваемый параметр]+"')",[временная задержка])


кавычки эти (((

  Ответить  
 
 автор: The Electronic Cat   (25.01.2011 в 05:27)   письмо автору
 
   для: Vincento   (25.01.2011 в 00:11)
 

Еще замыкание можно сделать. В вашем случае

Tu = setTimeout (function() {
        f_Up(elem);
    }, 20) ;

  Ответить  
 
 автор: mihdan   (25.01.2011 в 12:20)   письмо автору
 
   для: Vincento   (25.01.2011 в 00:11)
 

Дебагером (отладчиком) javascript-кода пользуйтесь и не будет таких проблем.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования