公司项目中有一个公告栏,写的时候我先想到了用marquee,于是发现了marquee有很多弊端,当文字全部显示完才出现新的文字,这样不是很友好,然后一查发现marquee这个标签已经被W3C标准废弃了,也就是不再支持使用这个标签了,于是我便用js+css去替代这个写法,并且做到类似无缝滚动的效果。直接上代码:
html代码:
<div id="scroll_div" class="fl">
<div id="scroll_begin">
<span class="pad_right">这是第一条信息的内容这是第一条信息的内容这是第一条信息的内容</span>
<span class="pad_right">这是第二条信息的内容这是第二条信息的内容这是第二条信息的内容</span>
<span class="pad_right">这是第三条信息的内容这是第三条信息的内容这是第三条信息的内容</span>
<span class="pad_right">这是第四条信息的内容这是第四条信息的内容这是第四条信息的内容</span>
<span class="pad_right">这是第五条信息的内容这是第五条信息的内容这是第五条信息的内容</span>
</div>
<div id="scroll_end"></div>
</div>
css代码:
#scroll_div {
height: 30px;
line-height: 30px;
overflow: hidden;
white-space: nowrap;
width: 800px;
background-color: #23527c;
color: #d8d8d8;
margin: 1rem 0;
text-align: center;
}
#scroll_begin,#scroll_end {
display: inline;
}
.pad_right {
margin-left: 100px;
}
js代码:
//文字横向滚动
function ScrollImgLeft(){
var speed = 40;//初始化速度 也就是字体的整体滚动速度
var MyMar = null;//初始化一个变量为空 用来存放获取到的文本内容
var scroll_begin = document.getElementById("scroll_begin");//获取滚动的开头id
var scroll_end = document.getElementById("scroll_end");//获取滚动的结束id
var scroll_div = document.getElementById("scroll_div");//获取整体的开头id
scroll_end.innerHTML=scroll_begin.innerHTML;//滚动的是html内部的内容,原生知识!
//定义一个方法
function Marquee(){
if(scroll_end.offsetWidth-scroll_div.scrollLeft<=0)
scroll_div.scrollLeft-=scroll_begin.offsetWidth;
else
scroll_div.scrollLeft++;
}
MyMar=setInterval(Marquee,speed);//给上面的方法设置时间 setInterval
//鼠标滑入这条公告栏的时候,清除上面的方法,让公告栏暂停
scroll_div.onmouseover = function(){
clearInterval(MyMar);
}
//鼠标滑出这条公告栏的时候,公告栏继续移动
scroll_div.onmouseout = function(){
MyMar = setInterval(Marquee,speed);
}
}
ScrollImgLeft();
效果截图: