2016-11-24 31 views
0

我已经使用HTML/CSS/JS制作了文字自动收报器,但经过一段时间文字更改与动画不同步,文字在可见时开始更改。我如何改进代码,以便只在隐藏时才会更改代码?一面文字自动收录器

var arr = ["text1", "text2", "text3", "text4"]; 
 

 
    (function headerMessage(counter) { 
 
    var text = arr[counter]; 
 
    $('.header-message > span').text(text).animate({ 
 
     'margin-left': '0px' 
 
    }, 500).delay("3000").animate({ 
 
     'margin-left': '-300px' 
 
    }, 500); 
 
    delete arr[counter]; 
 
    arr.push(text); 
 
    setTimeout(function() { 
 
     headerMessage(counter + 1); 
 
    }, 4000); 
 
    })(0);
.header-message { 
 
    border-left: 1px solid #e3e3e3; 
 
    padding-left: 10px; 
 
    line-height: 58px; 
 
    vertical-align: middle; 
 
    float: left; 
 
    margin-left: 10px; 
 
    overflow: hidden; 
 
} 
 
.header-message span { 
 
    font-family: Raleway; 
 
    font-size: 14px; 
 
    color: #979797; 
 
    font-weight: 500; 
 
    height: 30px; 
 
    line-height: 30px; 
 
    margin-left: -300px; 
 
    vertical-align: middle 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="header-message"> 
 
    <span style="margin-left: 0px;">We love to help businesses like yours.</span> 
 
</div>

的jsfiddle这里https://jsfiddle.net/qhtbsh2L/

+0

我使用的stop()尝试可能是有用https://jsfiddle.net/qhtbsh2L/1/ –

回答

0

你不应该使用单独的setInterval。尝试将更改文本操作排入您的动画链。

var arr = ["text1", "text2", "text3", "text4"]; 
 

 
    (function headerMessage(counter) { 
 
    var text = arr[counter]; 
 
    $('.header-message > span').text(text).animate({ 
 
     'margin-left': '0px' 
 
    }, 500).delay("3000").animate({ 
 
     'margin-left': '-300px' 
 
    }, 500).queue(function(next) { 
 
     headerMessage(counter + 1); 
 
     next(); 
 
    }); 
 
    delete arr[counter]; 
 
    arr.push(text); 
 
    })(0);
.header-message { 
 
    border-left: 1px solid #e3e3e3; 
 
    padding-left: 10px; 
 
    line-height: 58px; 
 
    vertical-align: middle; 
 
    float: left; 
 
    margin-left: 10px; 
 
    overflow: hidden; 
 
} 
 
.header-message span { 
 
    font-family: Raleway; 
 
    font-size: 14px; 
 
    color: #979797; 
 
    font-weight: 500; 
 
    height: 30px; 
 
    line-height: 30px; 
 
    margin-left: -300px; 
 
    vertical-align: middle 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="header-message"> 
 
    <span style="margin-left: 0px;">We love to help businesses like yours.</span> 
 
</div>