动画效果开发

案例一:无缝连续滚动特效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 1000px;
            height: 130px;
            border: 1px solid #000;
            margin: 50px auto;
            /*溢出隐藏*/
            overflow: hidden;
        }

        .box ul {
            list-style: none;
            /* 设置大一点,这样li才能浮动 */
            width: 5000px;
            position: relative;
            left: 0;
        }

        .box ul li {
            float: left;
            margin-right: 10px;
        }
    </style>
</head>
<body>
<div id="box" class="box">
    <ul id="list">
        <li><img src="images/0.png"></li>
        <li><img src="images/1.png"></li>
        <li><img src="images/2.png"></li>
        <li><img src="images/3.png"></li>
        <li><img src="images/4.png"></li>
        <li><img src="images/5.png"></li>
    </ul>
</div>
<script>
    var box = document.getElementById('box');
    var list = document.getElementById('list');

    // 复制多一遍所有的li
    list.innerHTML += list.innerHTML;

    // 全局变量,表示当前list的left值
    var left = 0;

    // 定时器
    var timer;

    // 动画封装成函数
    function move() {
        // 设表先关,防止动画积累 速度加快
        clearInterval(timer);
        timer = setInterval(function () {
            left -= 4;
            // 验收
            // 一张图片加右外边距210*6=1260
            if (left <= -1260) {
                left = 0;
            }
            list.style.left = left + 'px';
        }, 20);
    }

    move();

    // 鼠标进入停止定时器
    box.onmouseenter = function () {
        clearInterval(timer);
    }

    // 鼠标离开继续定时器
    box.onmouseleave = function () {
        move();
    }
</script>
</body>
</html>

案例二:轮播图特效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .carousel {
            width: 650px;
            height: 360px;
            border: 1px solid #000;
            margin: 50px auto;
            position: relative;
            /* 溢出隐藏 */
            overflow: hidden;
        }

        .carousel ul {
            list-style: none;
            /*设置大点宽度,li才可以浮动上去*/
            width: 6000px;
            position: relative;
            left: 0px;
            transition: left .5s ease 0s;
        }

        .carousel ul li {
            float: left;
        }

        .carousel .leftbtn {
            width: 50px;
            height: 50px;
            background-color: rgb(28, 180, 226);
            position: absolute;
            left: 20px;
            top: 50%;
            margin-top: -25px;
            border-radius: 50%;
        }

        .carousel .rightbtn {
            width: 50px;
            height: 50px;
            background-color: rgb(28, 180, 226);
            position: absolute;
            right: 20px;
            top: 50%;
            margin-top: -25px;
            border-radius: 50%;
            /*transition: all .5s ease 0s;*/
        }
    </style>
</head>
<body>
<div class="carousel">
    <ul id="list">
        <li><img src="images/beijing/0.jpg"></li>
        <li><img src="images/beijing/1.jpg"></li>
        <li><img src="images/beijing/2.jpg"></li>
        <li><img src="images/beijing/3.jpg"></li>
        <li><img src="images/beijing/4.jpg"></li>
    </ul>
    <a href="javascript:;" class="leftbtn" id="leftbtn"></a>
    <a href="javascript:;" class="rightbtn" id="rightbtn"></a>
</div>
<script>
    // 得到按钮和ul,ul整体进行运动
    var leftbtn = document.getElementById('leftbtn');
    var rightbtn = document.getElementById('rightbtn');
    var list = document.getElementById('list');

    // 克隆第一张图片 注意true才能克隆里面图片标签
    var cloneli = list.firstElementChild.cloneNode(true);
    // 上树
    list.appendChild(cloneli);

    // 当前ul显示到第几张了,从0开始数
    var idx = 0;

    // 节流锁
    var lock = true;

    // 右按钮监听
    rightbtn.onclick = function () {
        // 判断锁的状态
        if (!lock) return;
        lock = false;
        // 给list加过渡,为什么要加??css中不是已经加了么??这是因为最后一张图片会把过渡去掉
        list.style.transition = 'left .5s ease 0s';
        idx++;
        if (idx > 4) {
            // 设置一个延时器,延时器的功能就是将ul瞬间拉回0的位置
            // 延时器的目的就是让过渡动画结束之后
            setTimeout(function () {
                // 取消掉过渡,因为要的是瞬间移动,不是咕噜回去
                list.style.transition = 'none';
                list.style.left = 0;
                idx = 0;
            }, 500);
        }
        list.style.left = -idx * 650 + 'px';

        // 函数节流
        setTimeout(function () {
            lock = true;
        }, 500);
    }

    // 左按钮监听
    leftbtn.onclick = function () {
        // 判断锁的状态
        if (!lock) return;
        lock = false;
        // 判断是不是第0张,如果是,就要瞬间用假的替换真的
        if (idx == 0) {
            // 取消掉过渡,因为要的是瞬间移动,不是咕噜过去
            list.style.transition = 'none';
            // 直接瞬间移动到最后的假图片上
            list.style.left = -5 * 650 + 'px';
            // 设置一个延时器,这个延时器的延时时间可以是0ms
            // 虽然是0ms,但是可以让我们过渡先是瞬间取消,然后再加上
            setTimeout(function () {
                // 加过渡
                list.style.transition = 'left .5s ease 0s';
                // idx改为真正的最后一张图片的编号
                idx = 4;
                list.style.left = -idx * 650 + 'px';
            }, 0);
        } else {
            idx--;
            list.style.left = -idx * 650 + 'px';
        }

        // 函数节流
        setTimeout(function () {
            lock = true;
        }, 500);
    }
</script>
</body>
</html>

案例三:呼吸轮播图特效(图片淡入淡出) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .carousel {
            width: 650px;
            height: 360px;
            border: 1px solid #000;
            margin: 50px auto;
            position: relative;
            /* 溢出隐藏 */
            /*overflow: hidden;*/
        }

        .carousel ul {
            list-style: none;
        }

        .carousel ul li {
            position: absolute;
            top: 0;
            left: 0;
            /*透明度都是0*/
            opacity: 0;
            transition: opacity .5s ease 0s;
        }

        /*只有第一张透明度是1*/
        .carousel ul li:first-child {
            opacity: 1;
        }

        .carousel .leftbtn {
            width: 50px;
            height: 50px;
            background-color: rgb(28, 180, 226);
            position: absolute;
            left: 20px;
            top: 50%;
            margin-top: -25px;
            border-radius: 50%;
        }

        .carousel .rightbtn {
            width: 50px;
            height: 50px;
            background-color: rgb(28, 180, 226);
            position: absolute;
            right: 20px;
            top: 50%;
            margin-top: -25px;
            border-radius: 50%;
            /*transition: all .5s ease 0s;*/
        }
    </style>
</head>
<body>
<div class="carousel">
    <ul id="list">
        <li><img src="images/beijing/0.jpg"></li>
        <li><img src="images/beijing/1.jpg"></li>
        <li><img src="images/beijing/2.jpg"></li>
        <li><img src="images/beijing/3.jpg"></li>
        <li><img src="images/beijing/4.jpg"></li>
    </ul>
    <a href="javascript:;" class="leftbtn" id="leftbtn"></a>
    <a href="javascript:;" class="rightbtn" id="rightbtn"></a>
</div>
<script>
    // 得到按钮和ul,ul整体进行运动
    var leftbtn = document.getElementById('leftbtn');
    var rightbtn = document.getElementById('rightbtn');
    var list = document.getElementById('list');

    var lis = list.getElementsByTagName('li');
    // 当前是第几张图片显示
    var idx = 0;

    // 节流锁
    var lock = true;

    // 右按钮
    rightbtn.onclick = function () {
        // 判断节流
        if (!lock) return;
        lock = false;
        // 还没有改idx,此时的idx这个图片就是旧图,旧图淡出
        lis[idx].style.opacity = 0;
        idx++;
        if (idx > 4)
            idx = 0;
        // 改了idx,此时的idx这个图片就是新图,新图淡入
        lis[idx].style.opacity = 1;

        // 动画结束之后开锁
        setTimeout(function () {
            lock = true
        }, 500);
    }

    // 左按钮
    leftbtn.onclick = function () {
        if (!lock) return;
        lock = false;
        // 还没有改idx,此时的idx这个图片就是旧图,旧图淡出
        lis[idx].style.opacity = 0;
        idx--;
        if (idx <0)
            idx = 4;
        // 改了idx,此时的idx这个图片就是新图,新图淡入
        lis[idx].style.opacity = 1;

        // 动画结束之后开锁
        setTimeout(function () {
            lock = true
        }, 500);
    }
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值