CSS3动画合集:(琴键效果)(连续更新)

一 琴键效果:

先看效果:
这里写图片描述

实现思路:
这里写图片描述

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 80px;
            margin: 5px auto;
            background-color: grey;
            font-size: 30px;
            line-height: 80px;
            text-align: center;
            color: #fff;
            position: relative;
        }

        /* 给盒子一个伪类不改变大的HTML结构 */
        .box::after {
            position: absolute;
            content: "";
            /* 这里必须定位,后面解释 */
            top: 0;
            left: 0;
            /* 盒子的宽度刚开始是0,鼠标移入在慢慢变大 */
            width: 0px;
            height: 80px;
            background-color: red;
        }

        /* 鼠标移入时的样式 */
        .box.animationRun::after {
            width: 200px;
            transition: all .6s ease-in-out;
        }

        /* 鼠标移出时的样式 */
        .box.animationBack::after {
            width: 0px;
            transition: all .6s ease-in-out;
        }
    </style>
</head>
<body>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
</body>
</html>

<script src="./jquery-1.8.3.min.js"></script>
<script>

    //鼠标移入时,删除animationBack类,加上animationRun类
    $('.box').on('mouseenter',function(){
        $(this).removeClass('animationBack').addClass('animationRun');
    });


    //鼠标移入时,删除animationRun类,加上animationBack类
    $('.box').on('mouseleave',function(){
        $(this).removeClass('animationRun').addClass('animationBack');
    })

</script>

一些注意点:

/*
    1.关于定位的问题:因为伪类::after是添加在元素内容的后面,相当于
本例就是在文本"活动中心"的后面,为了让伪类盒子从左边开始显示,必须定位到
*/

/*
    2.关于伪类选择器,如果div的盒子有多个类,比如:

    <div class="box animationBack">活动中心</div>

    那么,此时要选中伪类,可以这样:

    .box.animationBack::after同时这个优先级比.box::after要高
*/

/*
    3.为什么要加一个动画返回的类animationBack,最主要的是transition
    是动画到指定的属性,但是返回原始值是没有动画的,是闪回.加上这个类,目的是让鼠标移出也有动画效果.
*/

/*
    4.jQuery中this的执行问题,$('.box')on('mouseenter',function(){ }
    这里是给所有的box类都加了鼠标移入事件,但是this指向的却是当前移入的div盒子

*/

模拟的效果:
这里写图片描述

修改一个BUG,上面的代码其实可以利用纯CSS实现这种效果,上面的思路是利用加类的方式来实现,但是也可以不用加类,比如:我们直接给box盒子一个伪类hover属性就可以实现了.但是有一个知识点要注意:

/*
translation属性:
写在默认情况下和写在hover里的区别:
            写在默认情况下:代表移入移出都有动画效果
            写在hover里:代表只有移入有动画效果,移出时是立刻闪现复原
*/

比如本例就是写在默认情况下的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 80px;
            margin: 5px auto;
            background-color: grey;
            font-size: 30px;
            line-height: 80px;
            text-align: center;
            color: #fff;
            position: relative;
        }

        /* 给盒子一个伪类不改变大的HTML结构 */
        .box::after {
            position: absolute;
            content: "";
            /* 这里必须定位,后面解释 */
            top: 0;
            left: 0;
            /* 盒子的宽度刚开始是0,鼠标移入在慢慢变大 */
            width: 0px;
            height: 80px;
            background-color: red;

            /* 加在元素里面返回有动画效果 */
            /* transition: all .6s ease-in-out; */
        }

        /* 鼠标移入时的样式 */
        .box:hover::after {
            width: 200px;

            /* 加在hover里面返回没有动画效果,是闪回 */
            /* transition: all .6s ease-in-out; */
        }   
    </style>
</head>
<body>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
    <div class="box">活动中心</div>
</body>
</html>

注意点:

//1.translation属性的注意点

/*2.选择器: .box:hover::after代表的意思是:
            找到鼠标移入到盒子上时此时的伪类after里的内容 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值