无缝滚动的小应用

无缝滚动的小应用

项目要实现下面的表格内容自动往下滚动,并且无缝衔接
效果图

想到了使用以前做过的图片无缝滚动,原理就是在需要的图片列表中增加一个额外的第一张图片,比方说你要展示的图片是 img1,img2,img3,img4,然后你需要把第一张图片增加到尾部,现在要展示的图片就是img1,img2,img3,img4,img5(img1),当图片滚完img5的时候,这时候就要立刻把此时滚动的位置换到第一张图片的位置,这样就能达到无缝了。
今天做的也跟上面的类似了,可视区不滚动时最多能显示6个,我开始就在数据的最后面加了6个,但是这里出现了个问题,就是这个容器的高度比6行的高度要多点(这是基于其他同事代码上加的功能),这也很好理解,因为移动端要自适应,一开始就算不了那么准了,最后的效果会有一顿的感觉了,然后就想最后在数据后面再加在一条数据就能解决了,试了下,果然行。

  (function() {
       // 这里是数据
       var userList = ...;
       var length = userList.length;
       function insertUserList(num) {
           var str = "";
           for (var i = 0; i < length+num; i++) {
               var k = i % length;
               str += "<div class='list-line'>";
                   str += "<div>"+userList[k].realname+"</div>";
                   str += "<div>"+userList[k].prize_name+"&nbsp;</div>";
                   str += "<div>"+userList[k].time+"</div>";
               str += "</div>";
           }
           $("#user-list").append(str);
       }

       if (userList.length <= 6) {
           insertUserList(0);
       } else {
           insertUserList(7);
           autoScroll();
       }
       function autoScroll() {
           // 获取可视区的总高度
            var userHeight = $("#user-list").height();
                userListLineHeight = $("#user-list .list-line").height();

           // 计算可视区多余的位置
           var moreHeight = userHeight - userListLineHeight * 6;
               // 达到了这个位置,就拉到头
               scrollBottomHeight = (length+1) * userListLineHeight - moreHeight,
               bodyList = document.querySelector("#user-list");
           function ani() {
               setTimeout(ani, 32);
               bodyList.scrollTop++;
               if (bodyList.scrollTop >= scrollBottomHeight) {
                   bodyList.scrollTop = userListLineHeight - moreHeight;
               }
           }
           ani();
       }
   }())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值