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

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;
    }
}

 

posted @ 2016-03-04 14:57  wifix  阅读(1698)  评论(0编辑  收藏  举报