2017-06-16 103 views
1

嗨,我正在用Javascript構建我的投資組合的JavaScript滑塊。幻燈片工作正常,但是當我添加淡入淡出過渡時,我不斷在兩張幻燈片之間獲得白色閃光。任何人都知道如何在它們之間建立平滑的淡入淡出?Javascript幻燈片白色屏幕

這是我的工作小提琴:https://jsfiddle.net/t9ezr8wr/2/

我的javascript:

$(function() { 
var theInterval; // Slide speed 
var images = new Array(); 
var counter = 1; 
var defaultSettings = { 
    "sliderContainer": "#slider" // SliderContainer 
    , "pauseWithMouse": true // Turn on/off pause with mouse 
    , "sliderSpeed": 3000 // Slide speed 
    , "transitionSpeed": 200 // transition speed 
}; 
// intialize slider 
// if myImages exists then 
images = myImages; 
if (images.length > 0) { 
    $(defaultSettings.sliderContainer).append('<img id="sliderImg" width="900" src="' + images[0] + '" />'); 
    startSlide(images); 
} 

function cycleImages(images) { 
    if (counter >= images.length) { 
     counter = 0; 
    } 
    console.log(counter); 
    document.getElementById("sliderImg").src = images[counter]; 
    counter++; 
    var images = $('#sliderImg') 
    var now = images.filter(':visible') 
    var next = now.next().length ? now.next() : images.first() 
    var speed = defaultSettings.transitionSpeed; //Transition speed 
    now.fadeOut(speed); 
    next.fadeIn(speed); 
} 

function startSlide() { 
    console.log('start'); 
    theInterval = setInterval(function() { 
     cycleImages(images); 
    }, defaultSettings.sliderSpeed); 
    // Set interval time 
}; 
var stopSlide = function() { // Stop slides on hover 
    console.log('stop'); 
    if (defaultSettings.pauseWithMouse) { 
     clearInterval(theInterval); 
    } 
}; 
$('#sliderImg').on('mouseover', function() { // Stop slides on mouseover 
    stopSlide(); 
}); 
$('#sliderImg').on('mouseout', function() { // Continue with slides on mouseout 
    startSlide(); 
}); 
}); 
+0

我認爲這個問題是'''now.fadeOut()'''和'''next.fadeIn()'''。我認爲在''''next'''之前'''now'''完全淡出甚至開始淡入 - 這意味着在''''''''結尾和'''next''之間有一段短暫的時間間隔。 ''從沒有圖像可見的地方開始。 –

回答

0

什麼u想不能用一個圖像來實現,所以我用了兩個圖像以達到預期的效果。

JS:

$(function() { 
    var theInterval; // Slide speed 
    var images = new Array(); 
    var counter = 1; 
    var defaultSettings = { 
     "sliderContainer": "#slider" // SliderContainer 
     , "pauseWithMouse": true // Turn on/off pause with mouse 
     , "sliderSpeed": 3000 // Slide speed 
     , "transitionSpeed": 600 // transition speed 
    }; 
    // intialize slider 
    // if myImages exists then 
    images = myImages; 
    if (images.length > 0) { 
     $(defaultSettings.sliderContainer).append('<img id="sliderImg" width="900" style="display:block" src="' + images[0] + '" />'); 
     $(defaultSettings.sliderContainer).append('<img id="sliderImg2" width="900" style="display:none" src="' + images[1] + '" />'); 
     startSlide(images); 
    } 

    function cycleImages(images) { 
     if (counter >= images.length) { 
      counter = 0; 
     } 
     console.log(counter); 
     document.getElementById("sliderImg").src = images[counter]; 
     counter++; 
     document.getElementById("sliderImg2").src = images[counter >= images.length ? 0 : counter]; 
     var images = $('#sliderImg') 
     var now = $("#sliderImg") 
     var next = $("#sliderImg2") 
     var speed = defaultSettings.transitionSpeed; //Transition speed 

     now.fadeOut(speed); 
     next.fadeIn(speed,function(){ 
      document.getElementById("sliderImg").src = document.getElementById("sliderImg2").src; 
      $("#sliderImg").css('display','block'); 
      $("#sliderImg2").css('display','none'); 
     }); 

    } 

    function startSlide() { 
     console.log('start'); 
     theInterval = setInterval(function() { 
      cycleImages(images); 
     }, defaultSettings.sliderSpeed); 
     // Set interval time 
    }; 
    var stopSlide = function() { // Stop slides on hover 
     console.log('stop'); 
     if (defaultSettings.pauseWithMouse) { 
      clearInterval(theInterval); 
     } 
    }; 
    $('#sliderImg').on('mouseover', function() { // Stop slides on mouseover 
     stopSlide(); 
    }); 
    $('#sliderImg').on('mouseout', function() { // Continue with slides on mouseout 
     startSlide(); 
    }); 
}); 

CSS:

body{ 
    margin: 0; 
} 

main { 
    max-width: 100%; 
    height: 737px; 
    margin: auto; 
    font-family: arial; 
    position: relative; 
    color: white; 
} 

#slider { 
    width: 100%; 
    height: 100%; 
    overflow: hidden; 
    position: relative; 
} 

#slider img {display:none; position: absolute; top: 0; left: 0;} 

#slider img:first-child {display:block;} 
#slider img:nth-child(2) {display:none;} 
+0

非常感謝!現在我明白爲什麼閃光燈出現了! – user3205743

+0

我們歡迎:) ,對於單幅圖像,會有一個沒有圖像的點,即在轉換之間,但在兩幅圖像的情況下,兩者都會同時淡入和淡出.... –

0

的閃光效果,那是因爲你的下一個畫面已經可見淡入()函數的調用之前,你解決它與旁邊添加.hide()在now.fadeOut()之前。

$(function() { 
 
    var theInterval; // Slide speed 
 
    var images = new Array(); 
 
    var counter = 1; 
 
    var defaultSettings = { 
 
     "sliderContainer": "#slider" // SliderContainer 
 
     , "pauseWithMouse": true // Turn on/off pause with mouse 
 
     , "sliderSpeed": 3000 // Slide speed 
 
     , "transitionSpeed": 800 // transition speed 
 
    }; 
 
    // intialize slider 
 
    // if myImages exists then 
 
    images = myImages; 
 
    if (images.length > 0) { 
 
     $(defaultSettings.sliderContainer).append('<img id="sliderImg" width="900" src="' + images[0] + '" />'); 
 
     startSlide(images); 
 
    } 
 

 
    function cycleImages(images) { 
 
     if (counter >= images.length) { 
 
      counter = 0; 
 
     } 
 
     console.log(counter); 
 
     document.getElementById("sliderImg").src = images[counter]; 
 
     counter++; 
 
     var images = $('#sliderImg') 
 
     var now = images.filter(':visible') 
 
     var next = now.next().length ? now.next() : images.first() 
 
     var speed = defaultSettings.transitionSpeed; //Transition speed 
 
     next.hide(); 
 
     now.fadeOut(speed); 
 
     next.fadeIn(speed); 
 
    } 
 

 
    function startSlide() { 
 
     console.log('start'); 
 
     theInterval = setInterval(function() { 
 
      cycleImages(images); 
 
     }, defaultSettings.sliderSpeed); 
 
     // Set interval time 
 
    }; 
 
    var stopSlide = function() { // Stop slides on hover 
 
     console.log('stop'); 
 
     if (defaultSettings.pauseWithMouse) { 
 
      clearInterval(theInterval); 
 
     } 
 
    }; 
 
    $('#sliderImg').on('mouseover', function() { // Stop slides on mouseover 
 
     stopSlide(); 
 
    }); 
 
    $('#sliderImg').on('mouseout', function() { // Continue with slides on mouseout 
 
     startSlide(); 
 
    }); 
 
});
body{ 
 
    margin: 0; 
 
} 
 

 
main { 
 
    max-width: 100%; 
 
    height: 737px; 
 
    margin: auto; 
 
    font-family: arial; 
 
    position: relative; 
 
    color: white; 
 
} 
 
    
 
#slider { 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow: hidden; 
 
    position: relative; 
 
} 
 

 
#slider img {display:none; position: absolute; top: 0; left: 0;} 
 

 
#slider img:first-child {display:block;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script> 
 
     var myImages = ["https://s4.postimg.org/45u9pqnml/slide1.jpg", "https://s11.postimg.org/f3qwh4syb/slide2.jpg", "https://s24.postimg.org/b365xoq7p/slide3.jpg"]; 
 
    </script> 
 
    <main> 
 
    <div id="slider"> 
 
    </div> 
 
</main>

+0

嗯好吧,但仍然閃爍:( – user3205743

+0

@ user3205743隨着您的實施,你可以做得更好,因爲你只有一個圖像顯示,以獲得一個繼續過渡,你需要同時顯示2個圖像,但它會更好,如果你可以用一個特殊的框架或一個JQuery插件來實現。plugins.jquery.com/tag/carousel – Kashkain

+0

我知道這一點,我不想使用插件 – user3205743

-2

嘗試改變transitionspeed 0

+0

我需要幻燈片之間的淡入淡出的轉換速度 – user3205743

+0

今後,請試着對問題的評論部分保留如此小的評論和建議 –