墨瑶曦羽 2022-08-28 16:17 采纳率: 85.7%
浏览 29
已结题

js无缝衔接图片出现抖动问题

 一组图片播放完出现抖动,如何解决呀?


```html
<div class="list_con" id="slide">
            <ul id="list">
                <li><a href=""><img src="../images/建筑.jpg" alt=""></a></li>
                <li><a href=""><img src="../images/建筑.jpg" alt=""></a></li>
                <li><a href=""><img src="../images/建筑.jpg" alt=""></a></li>
                <li><a href=""><img src="../images/建筑.jpg" alt=""></a></li>
                <li><a href=""><img src="../images/建筑.jpg" alt=""></a></li>
            </ul>
      </div>

css
.list_con {
    width: 1000px;
    height: 200px;
    /* border:1px solid #000; */
    margin: 10px auto 0;
    background-color: #f0f0f0;
    position: relative;
    top: 145px;
    overflow: hidden;
}

.list_con ul {
    list-style: none;
    width: 3200px;
    height: 200px;
    position: absolute;
    left: 0;
    top: 0;
}


.list_con li {
    width: 300px;
    height: 180px;
    float: left;
    margin: 6px;
}

.list_con li img{
    width: 300px;
    height: 190px;
  /* border: 5px solid transparent; */
}
.btns_con {
    width: 1000px;
    height: 30px;
    margin: 50px auto 0;
    position: relative;
}

js


window.onload = function(){
            var oLeft = document.getElementById('btn01');
            var oRight = document.getElementById('btn02');
            var oUl = document.getElementById('list');
            var oSlide =  document.getElementById('slide');

            /* 复制Ul中的li */
            oUl.innerHTML = oUl.innerHTML + oUl.innerHTML;

            var iLeft = 0;
            var iSpeed = -3;
            var oTime = setInterval(fnMove,30);
            function fnMove(){
                iLeft += iSpeed;
                oUl.style.left = iLeft +'px';

                if(iLeft <-1000){
                    iLeft = 0;
                }
                if(iLeft > 0){
                    iLeft = -1000;
                }
            }

            /* 鼠标悬浮事件 */
            oSlide.onmouseover = function(){
                clearInterval(oTime);
            }

            /* 鼠标离开事件 */
            oSlide.onpointerout = function(){
                oTime = setInterval(fnMove,30);
            }

        }

```

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-08-28 17:23
    关注

    要知道未复制html时的ul原始宽度(包括margin,padding,border-width),当滚动完原始宽度后设置left为0从头滚动从而不会闪动,而且应该复制slide的innerHTML,不是list的。要复制lst的需要将ul的padding去掉,示例如下

    <style>
        .list_con {
            width: 1000px;
            height: 200px;
            /* border:1px solid #000; */
            margin: 10px auto 0;
            background-color: #f0f0f0;
            position: relative;
            top: 145px;
            overflow: hidden;
        }
    
        .list_con ul {padding:0;/*去掉padding*/
            list-style: none;
            height: 200px;
            position: absolute;
            left: 0;
            top: 0;
        }
    
    
        .list_con li {
            width: 300px;
            height: 180px;
            float: left;
            margin: 6px;
        }
    
        .list_con li img {
            width: 300px;
            height: 190px;
            /* border: 5px solid transparent; */
        }
    
        .btns_con {
            width: 1000px;
            height: 30px;
            margin: 50px auto 0;
            position: relative;
        }
     
    </style>
    <div class="list_con" id="slide">
        <ul id="list">
            <li><a href=""><img src="../images/建筑.jpg" alt="1"></a></li>
            <li><a href=""><img src="../images/建筑.jpg" alt="2"></a></li>
            <li><a href=""><img src="../images/建筑.jpg" alt="3"></a></li>
            <li><a href=""><img src="../images/建筑.jpg" alt="4"></a></li>
            <li><a href=""><img src="../images/建筑.jpg" alt="5"></a></li>
        </ul>
    </div>
    <script>
        window.onload = function () {
            var oLeft = document.getElementById('btn01');
            var oRight = document.getElementById('btn02');
            var oUl = document.getElementById('list');
            var scrollWidth = 1560;//原始的list对象总宽度,这里开发工具直接得到了,要计算也是可以的,用window.getComputedStyle,题主自己去了解下
            oUl.style.width = scrollWidth * 2 + 'px';//通过原始宽度设置总宽度
            var oSlide = document.getElementById('slide');
    
            /* 复制Ul中的li */
            oUl.innerHTML = oUl.innerHTML + oUl.innerHTML;
    
            var iLeft = 0;
            var iSpeed = -3;
            var oTime = setInterval(fnMove, 30);
            function fnMove() {
                iLeft += iSpeed;
                if (Math.abs(iLeft) >= scrollWidth) iLeft = 0;
                oUl.style.left = iLeft + 'px';
                return;
                if (iLeft < -1000) {
                    iLeft = 0;
                }
                if (iLeft > 0) {
                    iLeft = -1000;
                }
            }
    
            /* 鼠标悬浮事件 */
            oSlide.onmouseover = function () {
                clearInterval(oTime);
            }
    
            /* 鼠标离开事件 */
            oSlide.onpointerout = function () {
                oTime = setInterval(fnMove, 30);
            }
    
        }
     
    </script>
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月28日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元