地图热点 - 波纹动画效果

使用CSS3动画实现地图热点,用box-shadow实现波纹的效果,首先,我们先回顾一下CSS3的动画,

  1、使用@keyfram来定义动画

    @keyframe  animitionName {

              0% {

              }
             50% {

             }

           100% {

            }

    }

    2、调用动画

      animation: name duration timing-function delay iteration-count direction fill-mode;

       (1) animition-duration: 完成真个动画需要的时间

       (2) timing-function: 速度曲线 ,   所取的属性值主要有 ease/linear/linear/ease-out/steps

       

ease默认值。动画以缓入缓出的方式开始和结束,中间阶段加速。
linear匀速
ease-in动画以缓入的方式开始,逐渐加速
ease-out动画以缓出的方式结束,逐渐减速
steps步数       steps(10) - 分10步完成动画

使用  timing-function:steps 可以实现打字机的效果

(3) animation-delay: 延迟n秒之后开始播放动画

(4) animation-iteration-count :  重复次数

(5)

direction 是 CSS 动画属性之一,用于指定动画播放的方向。

direction 属性接受以下几个可能的值:

  • normal:默认值。动画按照正常顺序播放。
  • reverse:动画按照相反的顺序播放。
  • alternate:动画在每次循环中交替反向播放。
  • alternate-reverse:动画在每次循环中交替反向播放,并且初始状态是相反的。

(6)  animation-fill-mode:  主要设置动画是否停在最后一帧

fill-mode 属性有以下几个可能的值:

  • none:默认值。动画完成后,不会保留任何动画效果,元素会恢复到初始状态。
  • forwards:动画完成后,元素将应用动画的最后一个关键帧的样式。如果动画设置了延迟时间,那么在延迟期间元素将保持动画的初始样式。
  • backwards:动画未开始时,将应用动画的第一个关键帧的样式。如果动画设置了延迟时间,那么在延迟期间元素将保持动画的第一个关键帧的样式。
  • both:动画效果同时包括 forwards 和 backwards。元素将在动画未开始之前应用第一个关键帧的样式,并在动画完成后应用最后一个关键帧的样式。

 

话不多说,上代码,

html部分:

   <div class="map">

        <div class="dot"></div>

        <div class="wave1"></div>

        <div class="wave2"></div>

        <div class="wave3"></div>

    </div>

CSS样式:

 <style>

        .map {

            position: relative;

            width: 700px;

            height: 500px;

            margin: 0 auto;

            border: 1px solid #999;

            background: url('./map.png') 50% 0 no-repeat;

        }

        .dot {

            /* left: 369px;

            top: 270px; */

            position: absolute;

            left: 50%;

            top: 50%;

            transform: translate(-50%,-50%);

            width: 8px;

            height: 8px;

            background-color: rgb(250, 36, 8);

            border-radius: 50%;

        }

        div[class^="wave"] {

            /* position: absolute;

            left: 369px;

            top: 270px; */

            position: absolute;

            left: 50%;

            top: 50%;

            transform: translate(-50%,-50%);

            width: 8px;

            height: 8px;

            border-radius: 50%;

            /* background-color: rgb(245, 235, 104); */

            box-shadow: 0px 0px 15px rgb(250, 36, 8);

            animation: wave 2s linear infinite;

        }

        .wave1 {

            animation-delay: 0.4s;

        }

        .wave2 {

            animation-delay: 0.8s;

        }

        @keyframes wave {

            0% {

            }

            70% {

                width: 30px;

                height: 30px;

                opacity: 1;

            }

            100% {

                width: 40px;

                height: 40px;

                opacity: 0;

            }

        }

    </style>

最后,你知道为什么这里的动画,是宽度和高度的变化,而不使用 transform:scale() 属性呢? 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值