JS运动 - 无缝滚动和缓动动画

JS运动 - 无缝滚动和缓动动画

  • 无缝滚动原理:首先先复制两张图片(第一张和第二张)放到最后面;ul绝对定位,如果ul的left值大于等于4张图片的宽度,就应该快速复原为0.

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无缝滚动</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 600px;
            height: 200px;
            background: red;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }
        ul {
            list-style: none;
            /*font-size: 0;*/ /* 清除图片之间的间距之方法一 */
            width: 1000%;
            position: absolute;
            left: 0;
            top: 0;
        }
        li {
            float: left;
        }
        li img {
            vertical-align: bottom; /* 清除图片之间的间距之方法二 */
        }
    </style>
</head>
<body>
    <div class="box">
        <ul>
            <li><img src="images/scroll01.jpg" alt=""></li>
            <li><img src="images/scroll02.jpg" alt=""></li>
            <li><img src="images/scroll03.jpg" alt=""></li>
            <li><img src="images/scroll04.jpg" alt=""></li>
            <li><img src="images/scroll01.jpg" alt=""></li>
            <li><img src="images/scroll02.jpg" alt=""></li>
            <li><img src="images/scroll03.jpg" alt=""></li>
            <li><img src="images/scroll04.jpg" alt=""></li>
        </ul>
    </div>
</body>
</html>

JS

<script>
    window.onload = function () {
        var ul = document.getElementsByTagName("ul")[0];
        var offsetX = 0;
        var timer = null;
        timer = setInterval(scrollDidScroll,10);
        function scrollDidScroll() {
            offsetX--;
            offsetX = offsetX < -1200 ? 0 : offsetX;
            ul.style.left = offsetX + "px";
            console.log(offsetX);
        }
        ul.onmouseover = function () {
            clearInterval(timer);
        }
        ul.onmouseout = function () {
            timer = setInterval(scrollDidScroll,10);
        }
    }
</script>

效果图

  • 缓动动画(减速运动)原理 : 记住公式

假如:初始值 leader = 0; 目标值 target = 400; speed = 10;公式如下
leader = leader + (target - leader) / speed;

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>滚动图</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            font-size: 10px;
        }
        ul, ol {
            list-style: none;
        }
        .box {
            width: 490px;
            height: 170px;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }
        .box ul {
            position: absolute;
            top: 0;
            left: 0;
            width: 800%;
            height: 100%;
        }
        .box ul li {
            width: 490px;
            float: left;
        }
        .box ol {
            position: absolute;
            bottom: 10px;
            left: 50%;
            margin-left: -40px;
            text-align: center;
        }
        .box ol li {
            width: 15px;
            height: 15px;
            line-height: 15px;
            float: left;
            background-color: #cccccc;
            color: #ffffff;
            margin-left: 10px;
            cursor: pointer;
        }
        .box .current {
            background-color: orange;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul id="scrollJS">
            <li><img src="0329images/01.jpg" alt=""></li>
            <li><img src="0329images/02.jpg" alt=""></li>
            <li><img src="0329images/03.jpg" alt=""></li>
            <li><img src="0329images/04.jpg" alt=""></li>
        </ul>
        <ol id="olJS">
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ol>
    </div>
</body>
</html>

JS

<script>
    window.onload = function () {
        var width = 490;
        var timer = null;
        var leader = 0;
        var scroll = document.getElementById("scrollJS");
        var lis = document.getElementById("olJS").children;
        for (var i=0;i<lis.length;i++) {
            lis[i].index = i;
            lis[i].onmouseover = function () {
                clearInterval(timer);
                for (var j=0;j<lis.length;j++) {
                    lis[j].className = "";
                }
                this.className = "current";
                var target = -this.index * width;
                timer = setInterval(function () {

                    leader = leader + (target - leader) / 10;
                    scroll.style.left = leader + "px";
                },30);
            }
        }
    }
</script>

效果图

posted @ 2017-03-31 22:35  Chaos_G  阅读(356)  评论(0编辑  收藏  举报