您的位置:首页 > Web前端 > JavaScript

js限定内容的溢出滚动(offset,style.left)

2016-03-04 14:57 309 查看
1.

1.html:
<div class="test" style="position: relative;">
<ul id="content" style="position: relative;">
<li>test111111111112222</li>
</ul>
</div>

2.scss:
.test{
overflow: hidden;
width: 200px;
}
ul#content{
list-style-type: none;
font-size: 0px;
white-space: nowrap;
overflow:hidden;
padding:0px;
li{
display: inline-block;
vertical-align: top;
font-size: 13px;
}
}

3.js:
<script>
$(function() {
var width = window.innerWidth - 100;
var content = $('#content').html();     //原内容<li>test111111112222222222</li>
var content_width = $('#content li').width(); //原宽度

$('#content').html(content + content);
var w = $('#content li').length * $('#content li').eq(0).width(); //w 总长度
$('#content').css('width', w);
var timer;
var el = $('#content')[0];

function toRight() {
window.clearInterval(timer);
var timer = window.setInterval(function () {
var offset = el.offsetLeft+10;  //偏移值 每次相对当前位置偏移10px
if(offset > 0){                 //第一次进来执行一次,以后为-xx 不再执行
//每次 +10 递增 -160,-150,-140,...,0,10 一旦>0,重置为-165
offset = -el.offsetWidth/2;
}
el.style.left = offset+'px';
},100)
}

function toLeft() {
window.clearInterval(timer);
var timer = window.setInterval(function () {
var offset = el.offsetLeft - 10;
if(offset<= -el.offsetWidth/2){  // 同理 当向左偏移到一半的时候重置回来
offset = 10;
}
el.style.left = offset+'px';
},100)
}

//如果容器的宽度够显示内容不进行滚动,不够则进行滚动显示
if($('.test').width() > content_width){
$('#content').html(content);
}
else{
toLeft();
}
});
</script>


2.写了后觉得可以优化下

// js部分:
$(function() {
var width = window.innerWidth - 100;
var content_width = $('#content li').width();
$('.test').width(width);
if(width < content_width){               //如果内容长度大于显示长度
var timer;
var el = $('#content')[0];
var offset = 0;             //内容的初始位置
var content = $('#content').html();
$('#content').append(content);   // 将原内容复制为两条,目的:当向左偏移时,内容前部分消失,在内容的尾部后可以看到内容消失的头部
function toLeft(){
window.clearInterval(timer);
timer = window.setInterval(function () {
offset = el.offsetLeft - 15;  //每次偏移的量
if(offset < -content_width-30){                      //如果滚动到底了,重置回来
offset = 0;
}
el.style.left = offset+'px'; //执行偏移
},100); // 每100毫秒移动一遍
}
toLeft();
console.log(content_width);
}
});

//css:
ul#content{
list-style-type: none;
font-size: 0px;
white-space: nowrap;
padding:0px;
li{
display: inline-block;
vertical-align: top;
font-size: 13px;
padding-left: 20px;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: