2023-04-27

自定义滚动无限循环

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

    <style>

        .box {

position:absolute;

top:100px;

left:50%;

height:60px;

width:200px;

transform:translateX(-50%);

background-color:#dcdfe6;

overflow-x:auto;

}

.item {

position:absolute;

left:0px;

top:0px;

bottom:0px;

right:0px;

flex-shrink:0;

height:100%;

width:200px;

background-color:#f56c6c;

font-size:30px;

text-align:center;

transform:translateX(0px);

}

</style>

</head>

<body>

<button onclick="clickMe(true)">点我下一步</button>

<button onclick="clickMe(false)">点我上一步</button>

<div class="box ">

    <div class="item">1</div>

    <div class="item">2</div>

    <div class="item">3</div>

    <div class="item">4</div>

    <div class="item">5</div>

</div>

<script>

    let d = 200

    let index = 0

    const box = document.getElementsByClassName('box')[0]

    const items = document.getElementsByClassName('item')

    let current = -1;

    function clickMe(isNext = false) {

        if (!isNext) {

            index--

current--

            if (current < 0) {

                current = items.length - 1

            }

        } else {

            index++

current++

            if (current > items.length - 1) {

                current = 0

            }

}

        for (let i = 0; i < items.length; i++) {

            const item = items[i]

            let translateX = i * d - ((index - 1) * d)

            item.style.transform = `translateX(${translateX}px)`

            item.style.transitionDuration = `0.4s`

        }

        if (index >= items.length + 1) index = 0

        console.log('current', current, box,)

        const firstEle = items[0]

        const lastEle = items[items.length - 1]

        if (index == 1) {

            index++

            //取出最后一个放到第一个

            lastEle.style.transform = `translateX(-${d}px)`

            box.insertBefore(lastEle, firstEle);

        } else if (index == items.length) {

            index--

            //取出第一个放到最后一个

            firstEle.style.transform = `translateX(${d}px)`

            box.appendChild(firstEle);

}

}

    clickMe(true)

</script>

</body>

</html>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • CSS 面试题汇总 1. 介绍下 BFC 及其应用 参考答案:参考答案:所谓 BFC,指的是一个独立的布局环境,...
    5cc9c8608284阅读 864评论 0 1
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,752评论 0 7
  • client,page和screen的区别? clientX,clientY是触摸点相对于viewport视口x,...
    change_22fa阅读 1,844评论 1 1
  • git add .$ git pull origin feature/V8.30 可以从其他的分支拉当前的分支名$...
    言辞渐觉乏味阅读 590评论 0 0
  • <template> <div v-click-outside="bindEvent" ref="agm...
    一曲灬流觞阅读 4,314评论 0 1

友情链接更多精彩内容