Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滑块功能在safari中不像在chrome/firefox中那样运行_Javascript_Jquery_Css - Fatal编程技术网

Javascript 滑块功能在safari中不像在chrome/firefox中那样运行

Javascript 滑块功能在safari中不像在chrome/firefox中那样运行,javascript,jquery,css,Javascript,Jquery,Css,我有一个滑块功能,可以自动运行一组列表项。在Chrome和Firefox中,静止图像是自动旋转后的第一个图像不幸的是,在Safari和IE中,它依赖于最后一张图片。我认为这可能是一个风格问题,但我没有使用任何风格,将导致这一点。我还认为可能是setInterval()或setTimeout()造成了不一致。我无法确定原因是什么 $(function ($) { var slideCount = $('#slider ul li').length; var slideWidth

我有一个
滑块
功能,可以自动运行一组列表项。
ChromeFirefox中,静止图像是自动旋转后的第一个图像
不幸的是,在Safari和IE中,它依赖于最后一张图片。我认为这可能是一个风格问题,但我没有使用任何风格,将导致这一点。我还认为可能是
setInterval()
setTimeout()
造成了不一致。我无法确定原因是什么

$(function ($) {

    var slideCount = $('#slider ul li').length;
    var slideWidth = $('#slider ul li').width();
    var slideHeight = $('#slider ul li').height();
    var sliderUlWidth = slideCount * slideWidth;

    $('#slider').css({ width: slideWidth, height: slideHeight });

    $('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });

    $('#slider ul li:last-child').prependTo('#slider ul');

    function moveLeft() {
        $('#slider ul').animate({
            left: + slideWidth
        }, 800, function () {
            $('#slider ul li:last-child').prependTo('#slider ul');
            $('#slider ul').css('left', '');
        });
    };

    function moveRight() {
        $('#slider ul').animate({
            left: - slideWidth
        }, 800, function () {
            $('#slider ul li:first-child').appendTo('#slider ul');
            $('#slider ul').css('left', '');
        });
    };

    $('.sa-left').click(function () {
        moveLeft();
        clearInterval(auto);
    });

    $('.sa-right').click(function () {
        moveRight();
        clearInterval(auto);
    });


    var auto = setInterval(moveRight, 1000);

    var stopOnSlide =  slideCount*1000+1000; 

    window.setTimeout(function(){
        clearInterval(auto);

        $( '.sa-left , .sa-right' ).delay(1000).fadeIn('slow');

    }, stopOnSlide);  
});
我错过了什么?我已经研究过这个特定的问题,还没有发现关于这个问题可能是什么的线索

    <div id="container">

        <div id="sliderContainer">
            <div id="slider">
                <div class="slider-arrow sa-left"><img src='arrowLeft.png'/></div>
                <div class="slider-arrow sa-right"><img src='arrowRight.png'/></div>
                <ul>
                  <li id='toggle1'><img src="t1.png"></li>
                  <li id='toggle2'><img src="t2.png"></li>
                  <li id='toggle3'><img src="t3.png"></li>
                </ul> 
            </div>
        </div>
    </div>

    <!--[if lt IE 9]>
        <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- crucial scripts -->
    <script type="text/javascript" src="https://s0.2mdn.net/ads/studio/Enabler.js"></script>
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.0.min.js"></script>

    /<!-- plugin scripts -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenLite.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TimelineLite.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/plugins/CSSPlugin.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/easing/EasePack.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/draggabilly/1.2.0/draggabilly.pkgd.min.js"></script>

    <!-- custom scripts -->
    <script type="text/javascript" src="script.js"></script>

/
更新的JS

$(function ($) {

    var slider = $('#slider ul');
    var slideCount = $('#slider ul li').length;
    var slideWidth = $('#slider ul li').width();
    var slideHeight = $('#slider ul li').height();
    var sliderUlWidth = slideCount * slideWidth;
    var transitionDuration = 400;
    var sliderDuration = 4000;
    var activeSlide = 1;
    var autoSlide;
    var setAuto = true;



    $('#slider').css({ width: slideWidth, height: slideHeight, overflow: 'hidden',position:'relative' });

     $('#slider ul').css({ width: sliderUlWidth, position: 'absolute'});

     function sliderAnimate() {
        clearInterval(autoSlide);

        slider.animate({
            left: -(activeSlide-1)*slideWidth
        },transitionDuration);

        if(setAuto){
            autoSlideHandler();
        }           

     };

     sliderAnimate();

    function autoSlideHandler(){

        autoSlide = setInterval(function(){

            if(activeSlide<slideCount){
                activeSlide++;
                sliderAnimate();
            }else {
                swapFirstToLast();
                setAuto = false;
                $( '.sa-left , .sa-right' ).fadeIn('slow');
                sliderAnimate()
            }

         },sliderDuration);
    }

    $('.sa-left').click(function () {
        if(activeSlide >1){
            activeSlide--;
            sliderAnimate();
        }else {
            swapLastToFirst();
            sliderAnimate()
        }
    });

    $('.sa-right').click(function () {
        if(activeSlide < slideCount){
            activeSlide++;
            sliderAnimate();
        }else {
            swapFirstToLast();
            sliderAnimate()
        }
    });

    function swapFirstToLast(){
        var firstSlide = slider.find('li:first-child');
        slider.append(firstSlide.clone());
        slider.css('left',-(activeSlide-2)*slideWidth);
        firstSlide.remove()
    }

    function swapLastToFirst(){
        var lastChild = slider.find('li:last-child');
        slider.prepend(lastChild.clone()).css('left',-(activeSlide)*slideWidth);
        lastChild.remove();
    }


});
$(函数($){
变量滑块=$(“#滑块ul”);
var slideCount=$('#slider ul li')。长度;
var slideWidth=$('#slider ul li').width();
var slideHeight=$('#slider ul li').height();
var sliderUlWidth=slideCount*slideWidth;
var转换持续时间=400;
var sliderDuration=4000;
var=1;
var自动滑动;
var setAuto=true;
$('#slider').css({宽度:slideWidth,高度:slideHeight,溢出:“隐藏”,位置:'relative'});
$('#slider ul').css({宽度:sliderUlWidth,位置:'绝对'});
函数sliderAnimate(){
clearInterval(自动滑动);
滑块。动画({
左:-(活动幻灯片-1)*幻灯片宽度
},过渡期);
如果(设置自动){
autoSlideHandler();
}           
};
sliderAnimate();
函数autoSlideHandler(){
autoSlide=setInterval(函数(){
如果(活动幻灯片1){
活动幻灯片--;
sliderAnimate();
}否则{
swapLastToFirst();
sliderAnimate()
}
});
$('.sa right')。单击(函数(){
如果(活动幻灯片<幻灯片计数){
activeSlide++;
sliderAnimate();
}否则{
swapFirstToLast();
sliderAnimate()
}
});
函数swapFirstToLast(){
var firstSlide=slider.find('li:firstchild');
slider.append(firstSlide.clone());
css('left',-(activeSlide-2)*slideWidth);
firstSlide.remove()
}
函数swapLastToFirst(){
var lastChild=slider.find('li:lastChild');
slider.prepend(lastChild.clone()).css('left',-(activeSlide)*slideWidth);
lastChild.remove();
}
});


能否请您也发布您的
html
。我认为html没有必要包含在内,但我已将其添加到原始帖子中。问题不太清楚,这就是我要求发布html的原因。请检查答案。如果需要进一步更新,请继续发布。问题是:幻灯片自动设置动画后,我想返回初始slide并停止动画。它在Chrome和Firefix中工作,而在Safari中不工作。更新的JS删除了我在第一个周期后用来停止运行动画的设置间隔,但我需要它。我已经更新了我的答案和小提琴。请现在检查。您的代码非常简单、干净,更重要的是,它可以跨浏览器工作。谢谢你的眼睛、大脑和帮助。你删除了我添加和准备第一个剪辑的位置,以便箭头在任意方向循环。这会改变箭头在列表项的末尾或开头时的行为。你这样做的逻辑是什么?虽然我喜欢此变体,但我不想失去功能能够使用任意一个箭头循环的不稳定性,这让我回到了我的原始问题。我认为setInterval和setTimeout存在冲突。