2017-06-16 80 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

今后,请试着对问题的评论部分保留如此小的评论和建议 –