2015-03-24 1 views
0

Я создаю карусель изображений с вставкой/выводом анимации с javascript и jquery.Текущее изображение мерцает назад после исчезновения в карусели javascript

Перед тем, как следующие изображения затухают, текущее изображение отображается ненадолго, хотя оно исчезло. Это происходит, хотя я использую onload, чтобы убедиться, что следующее изображение загружено и правильно определено. (Живой код: www.jbkphotographs.com/nepal.html)

function moveToNextImg(){ 
    if(current === imgArray.length-1){ 
     current = 0; 
    } 
    else{ 
     current++; 
    } 
    updateIndex(); 

    //#imgWrapper is <div> that contains <img> 
    $("#imgWrapper").fadeOut("slow",loadImg); 
} 


function loadImg(){ 

    imgName = imgArray[current].getAttribute("src"); 
    nextImg.src = imgName.replace("_Thumb",""); 

    nextImg.id = "currentImg"; 
    nextImg.onload = function(){ 

     if((nextImg.height) > (nextImg.width)){ 
      nextImg.style.width = "42.5%" 
     } 

     else{ 
      nextImg.style.width = '750px'; 
     } 

     imgWrapper.appendChild(nextImg); 


    } 
    $("#imgWrapper").fadeIn("slow"); 
} 

ответ

0

Я видел его. У вас есть такие эффекты, потому что вы теряете изображение до его загрузки.

а) Вы должны предварительно загружать изображения, прежде чем скользнуть иметь FADEOUT силу по FadeIn

б) В противном случае положить эффект плавного увеличения громкости в OnLoad
обратного вызова изображений:

function moveToNextImg(){ 
    if(current === imgArray.length-1){ 
     current = 0; 
    } else { 
     current++; 
    } 
    updateIndex(); 

    //#imgWrapper is <div> that contains <img> 
    $("#imgWrapper").fadeOut("slow",loadImg); 
} 


function loadImg(){ 

    imgName = imgArray[current].getAttribute("src"); 
    nextImg.src = imgName.replace("_Thumb",""); 

    nextImg.id = "currentImg"; 
    //This code will run only when images will be loaded 
    nextImg.onload = function(){ 

     if((nextImg.height) > (nextImg.width)){ 
      nextImg.style.width = "42.5%" 
     } 

     else{ 
      nextImg.style.width = '750px'; 
     } 

     imgWrapper.appendChild(nextImg); 

     $("#imgWrapper").fadeIn("slow"); 
    } 

    //any code here will run immediately before the onload runs 
} 
+0

Спасибо для ответа. Быстрый вопрос: в моем исходном коде fadeIn следует после загрузки. Не гарантирует ли это, что fadeIn происходит после загрузки изображения, даже если он не включен внутри обработчика события onload? – user3562812

+0

Событие onload является асинхронным, оно будет работать, когда изображение загрузится, оно не является линейным по отношению к коду, все за пределами onload будут работать сразу – albanx