JS动画实现跑马灯

基于JS动画实现无缝滚动的跑马灯

html+css

<div class="showBox">
    <ul class="wrapper">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
    </ul>
</div>
       .showBox {
            position: relative;
            margin: 20px auto;
            width: 500px;
            height: 100px;
            border: 1px solid green;
            overflow: hidden;
        }

        .wrapper {
            position: absolute;
            top: 0;
            left: 0;
            width: 900px;
            height: 100px;
        }

        .wrapper li {
            float: left;
            width: 100px;
            height: 100px;
            line-height: 100px;
            text-align: center;
            font-size: 20px;
        }

        .wrapper li:nth-child(3n+1) {
            background: lightblue;
        }

        .wrapper li:nth-child(3n+2) {
            background: lightcyan;
        }

        .wrapper li:nth-child(3n+3) {
            background: lightpink;
        }

让wrapper每间隔一段时间(最优动画时间是13~17MS)在原有的LEFT值基础上减去步长(想让动画快一些,步长就大一点)

过程:

1.把wrapper中原有的LI整体克隆一份放到容器的末尾(无缝滚动),并重新设置宽度

2.基于定时器实现动画

  • 获取当前wrapper的left值,减去步长,把最新的left赋值给元素即可
  • 实现无缝:当我们ul距离showBox的左偏移已经是整个wrapper的一半宽度(第一组原始内容已经运动完成了,即看到的是克隆后的),此时让wrapper立即运动到left为零的位置即可

javaScript

let wrapper = document.querySelector('.wrapper')
      
wrapper.innerHTML += wrapper.innerHTML

wrapper.style.width = parseFloat(window.getComputedStyle(wrapper).width) * 2 + 'px'

setInterval(() => {
    let curL = parseFloat(window.getComputedStyle(wrapper).left)
    curL -= 2
    wrapper.style.left = curL+'px'

    if (Math.abs(wrapper.offsetLeft) >= parseFloat(window.getComputedStyle(wrapper).width) / 2) {
        wrapper.style.left = 0+'px' //=>立即回到起始的位置
    }
}, 17)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值