• 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;
         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;
        }
    }
  • 相关阅读:
    一文说清 InnoDB 的事务机制
    MySQL 索引结构
    Mysql索引(一篇就够le)
    对Elasticsearch生命周期的思考
    elasticsearch备份和还原(基于hdfs)
    想写一篇jvm的工具入门
    elasticsearch跨集群数据迁移
    [论文阅读]阿里DIN深度兴趣网络之总体解读
    [源码阅读] 阿里SOFA服务注册中心MetaServer(3)
    [源码阅读] 阿里SOFA服务注册中心MetaServer(2)
  • 原文地址:https://www.cnblogs.com/isdom/p/webclips032.html
Copyright © 2020-2023  润新知