Please tell me about the seamless rotation of js.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        *{ margin: 0; padding: 0; text-decoration: none;}
        body { padding: 20px;}
        -sharpcontainer { width: 600px; height: 400px; border: 3px solid -sharp333; overflow: hidden; position: relative;}
        -sharplist { width: 4900px; height: 400px; position: absolute; z-index: 1;}
        -sharplist img { float: left;}
        -sharpbuttons { position: absolute; height: 10px; width: 100px; z-index: 2; bottom: 20px; left: 250px;}
        -sharpbuttons span { cursor: pointer; float: left; border: 1px solid -sharpfff; width: 10px; height: 10px; border-radius: 50%; background: -sharp333; margin-right: 5px;}
        -sharpbuttons .on {  background: orangered;}
        .arrow { cursor: pointer; display: none; line-height: 39px; text-align: center; font-size: 36px; font-weight: bold; width: 40px; height: 40px;  position: absolute; z-index: 2; top: 180px; background-color: RGBA(0,0,0,.3); color: -sharpfff;}
        .arrow:hover { background-color: RGBA(0,0,0,.7);}
        -sharpcontainer:hover .arrow { display: block;}
        -sharpprev { left: 20px;}
        -sharpnext { right: 20px;}
    </style>
    <script type="text/javascript">

        window.onload = function () {
            var container = document.getElementById("container");
            var list = document.getElementById("list");
            var buttons = document.getElementById("buttons").getElementsByTagName("span");
            var prev = document.getElementById("prev");
            var next = document.getElementById("next");
            var index = 1;
            var len = 5;
            var animated = false;
            var interval = 3000;
            var timer;


            function animate (offset) {
                if (offset == 0) {
                    return;
                }
                animated = true;
                var time = 300;
                var inteval = 10;
                var speed = offset/(time/inteval);
                var left = parseInt(list.style.left) + offset;

                var go = function (){
                    if ( (speed > 0 && parseInt(list.style.left) < left) || (speed < 0 && parseInt(list.style.left) > left)) {
                        list.style.left = parseInt(list.style.left) + speed + "px";
                        setTimeout(go, inteval);
                    }
                    else {
                        list.style.left = left + "px";
                        if(left>-600){
                            list.style.left = -600 * len + "px";
                        }
                        if(left<(-600 * len)) {
                            list.style.left = "-600px";
                        }
                        animated = false;
                    }
                }
                go();
            }

            function showButton() {
                for (var i = 0; i < buttons.length ; iPP) {
                    if( buttons[i].className == "on"){
                        buttons[i].className = "";
                        break;
                    }
                }
                buttons[index - 1].className = "on";
            }

            function play() {
                timer = setTimeout(function () {
                    next.onclick();
                    play();
                }, interval);
            }
            function stop() {
                clearTimeout(timer);
            }

            next.onclick = function () {
                if (animated) {
                    return;
                }
                if (index == 5) {
                    index = 1;
                }
                else {
                    index += 1;
                }
                animate(-600);
                showButton();
            }
            prev.onclick = function () {
                if (animated) {
                    return;
                }
                if (index == 1) {
                    index = 5;
                }
                else {
                    index -= 1;
                }
                animate(600);
                showButton();
            }

            for (var i = 0; i < buttons.length; iPP) {
                buttons[i].onclick = function () {
                    if (animated) {
                        return;
                    }
                    if(this.className == "on") {
                        return;
                    }
                    var myIndex = parseInt(this.getAttribute("index"));
                    var offset = -600 * (myIndex - index);

                    animate(offset);
                    index = myIndex;
                    showButton();
                }
            }

            container.onmouseover = stop;
            container.onmouseout = play;

            play();

        }
    </script>
</head>
<body>

<div id="container">
    <div id="list" style="left: -600px;">
        <img src="img/5.jpg" alt="1"/>
        <img src="img/1.jpg" alt="1"/>
        <img src="img/2.jpg" alt="2"/>
        <img src="img/3.jpg" alt="3"/>
        <img src="img/4.jpg" alt="4"/>
        <img src="img/5.jpg" alt="5"/>
        <img src="img/1.jpg" alt="5"/>
    </div>
    <div id="buttons">
        <span index="1" class="on"></span>
        <span index="2"></span>
        <span index="3"></span>
        <span index="4"></span>
        <span index="5"></span>
    </div>
    <a href="javascript:;" id="prev" class="arrow"><</a>
    <a href="javascript:;" id="next" class="arrow">></a>
</div>

</body>
</html>


  js
  1.515list.style.left<0list.style.left=3000px;left>3000pxlist.style.left=0
  2.left-3000-600list.style.left-3000-600-3600
  
Aug.18,2021

to put it simply, you can't achieve the concept of seamless if you don't add it. The last one replaces the first one, so the first one you see is actually the second one. If you don't understand, you can remove the displaynone and look directly at the changing process of the picture. This will help you understand


to solve your question: this is a way to hide your eyes.
Why should there be one more in the end, and it is a repetition of the first one?
the reason is very simple. After the fifth picture is rotated, what do you want to see? Naturally, you want to see the first round-robin, right?

if you don't have the + 1 one, what you will see is blank, not seamless rotation.
at this point, you need to repeat a picture to cover up the blank space. After you have rotated to this blank, the rotated picture will be restored and return to its original state. It can cycle infinitely again.

Menu