JavaScript, миниатюра () - PullRequest
       14

JavaScript, миниатюра ()

0 голосов
/ 25 января 2012

Анимация (смена изображения) не останавливается на событии onmouseout. Почему?

JavaScript:

function thumbnail ( type, start, i, m, id, begin, end ) 
{
    if ( type == 1 ) 
    {
        document.getElementById(id).src = begin + id + i + end;

        if ( i == m + 1 ) 
        {
            document.getElementById(id).src = begin + id + end;
            i = 2;
        } 
        else 
        {
            i++;
        }

        setTimeout("thumbnail(1, "+start+", "+i+", "+m+", '"+id+"', '"+begin+"', '"+end+"');", 1000 );
    }

    if ( type == 2 ) 
    {
        document.getElementById(id).src = begin + id + end;
    }
}

HTML:

<img id="aaa" src="http://example.com/file/aaa.png" width="160" height="120" onmouseover="thumbnail(1,2,2,9,'aaa','http://example.com/file/','.png');" onmouseout="thumbnail(2,2,2,9,'aaa','http://example.com/file/','.png');" />

Изображения:

aaa.png, aaa2.png, ..., aaa9.png

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Попробуйте что-то вроде этого:

var delay;

function thumbnail ( type, start, i, m, id, begin, end ){
  if ( type == 1 ){
    document.getElementById(id).src = begin + id + i + end;
    if ( i == m + 1 ){
      document.getElementById(id).src = begin + id + end;
      i = 2;
    } 
    else{
      i++;
    }
    if(delay) clearTimeout('delay');
    delay = setTimeout("thumbnail(1, "+start+", "+i+", "+m+", '"+id+"', '"+begin+"', '"+end+"');", 1000 );
  }
  if ( type == 2 ){
    document.getElementById(id).src = begin + id + end;
    clearTimeout('delay');
  }
}
0 голосов
/ 25 января 2012

Потому что вы вызываете setTimeout рекурсивно и не имеете условий, которые когда-либо его остановят.

...