当文本内容长度超过容器元素宽度时,要求文本自动滚动,如下图
有以下两点限制:
原理:当子元素的实际内容长度
scrollWith
大于可视区宽度clientWith
时,利用position:relative
的属性来对子元素进行左右移动,使子元素的所有内容能够在父元素的可视区宽度内展示出来就相当于我们透过一个小窗口看窗外经过的火车一样,小窗口是父元素,而经过的火车是子元素
element.clientwidth 表示元素的可视区宽度, element.scrollWidth 表示元素内容宽度
父元素要设置 overflow: hidden
,以便能够隐藏子元素超出内容。但是子元素不能够设置 overflow: hidden
,因为子元素设置了该属性,那么子元素的 clientWidth
就和 scrollWidth
相等了。
下面是源码,复制即可运行。
<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>文本过长自动滚动</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
#parentEle {
margin: 0 auto;
border: 1px solid blue;
/* 固定宽度 */
width: 100px;
/* 超过宽度自动隐藏 */
overflow: hidden;
}
#sonEle {
/* 相对位置 */
position: relative;
/* 不能自动换行 */
white-space: nowrap;
}
</style>
</head>
<body>
<div id="parentEle">
<div id="sonEle">
春草带雨晚来急,野渡无人舟自横
</div>
</div>
<script>
$(function(){
var sonEle = document.querySelector("#sonEle");
// 子元素实际内容长度超过可视区宽度
if (sonEle.scrollWidth > sonEle.clientWidth) {
var d = sonEle.scrollWidth - sonEle.clientWidth;
$(sonEle).animate({left: -d +'px'}, 3000);
$(sonEle).animate({left:'0px'}, 3000);
setInterval(function(){
$(sonEle).animate({left: -d +'px'}, 3000);
$(sonEle).animate({left:'0px'}, 3000);
}, 6000);
}
})
</script>
</body>
</html>