* {
margin: 0;
padding: 0;
}
#view {
width: 300px;
height: 50px;
border: 2px solid #dedede;
margin: 200px auto;
overflow: hidden;
}
li {
list-style: none;
}
#list li {
width: 300px;
height: 50px;
line-height: 50px;
text-indent: 2em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<div id="view">
<ul id="list">
<li>郑州单双限号</li>
<li>金马奖台独</li>
<li>ig夺冠</li>
<li>外卖商家不刷锅</li>
<li>王聪学习js非常吃力</li>
<li>丁修国笑话王聪引争议</li>
<li>震惊,王聪消失一个多月,竟在做这些事情</li>
</ul>
</div>
var list = document.querySelector('#list');
function nextPage(){
ani(list,'marginTop',-50,400,function(){
list.style.marginTop = 0;
list.appendChild(list.children[0]);
})
}
var timer = setInterval(nextPage, 1000);
view.onmouseover = function(){
clearInterval(timer);
}
view.onmouseout = function(){
timer = setInterval(nextPage, 1000);
}
function ani(el,str,end,tm,fn){
clearInterval(el.timer);
var start = getSty(el,str);
start = parseFloat(start);
var s = end - start;
el.timer = setInterval(function(){
start += s/tm*16.7;
if(s>0){
if(start>=end){
start = end;
clearInterval(el.timer);
flag = true;
el.style[str] = str === 'opacity'?start:start+'px';
fn?fn():null;
}else{
el.style[str] = str === 'opacity'?start:start+'px';
}
}else{
if(start<=end){
start = end;
clearInterval(el.timer);
flag = true;
el.style[str] = str === 'opacity'?start:start+'px';
fn?fn():null;
}else{
el.style[str] = str === 'opacity'?start:start+'px';
}
}
}, 16.7);
}
function getSty(el,str){
var res;
if(el.currentStyle){
res = el.currentStyle[str];
}else{
res = getComputedStyle(el)[str];
}
return res;
}