网赚妈妈

 找回密码
 立即注册
搜索
查看: 1003|回复: 20

奇技淫巧——CSS 实现波浪效果

[复制链接]
  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2018-10-30 19:56:23 | 显示全部楼层 |阅读模式

    点击右上方红色按钮关注“web秀”,让你真正秀起来

    前言

    一直以来,使用纯 CSS 实现波浪效果都是十分困难的。

    tvtj80PHPOvO22HH.jpg

    CSS 实现波浪效果

    因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法。 当然,借助其他力量(SVG、CANVAS),是可以很轻松的完成所谓的波浪效果的。

    下面先来看看非 CSS 方式实现的波浪效果。

    SVG 实现波浪效果

    借助 SVG ,是很容易画出三次贝塞尔曲线的。

    aqpyQ5bbF5Y66Fpp.jpg

    SVG 实现波浪效果

    eXTmaZoe9ow6m9G9.jpg

    SVG 实现波浪效果

    画出三次贝塞尔曲线的核心在于 这一段。感兴趣的可以自行去研究研究。

    canvas 实现波浪效果

    使用 canvas 实现波浪效果的原理与 SVG 一样,都是利用路径绘制出三次贝塞尔曲线并赋予动画效果。

    t5HO4R5a5sgw4o4T.jpg

    canvas 实现波浪效果

    w4ZSm6dfddW4mdYb.jpg

    canvas 实现波浪效果

    可以复制上方代码至在线coding, 查看效果。

    主要是利用了动态绘制 ctx.bezierCurveTo() 三次贝塞尔曲线实现波浪的运动效果,感兴趣的可以自行研究。

    CSS实现波浪效果

    最开始不是说css不能实现吗?是,我们没有办法直接绘制出三次贝塞尔曲线,但是我们可以利用一些讨巧的方法,模拟达到波浪运动时的效果,下面来看看这种方法。

    原理

    原理十分简单,我们都知道,一个正方形,给它添加 border-radius: 50%,将会得到一个圆形。

    oBL4C6BDZ97494Fb.jpg

    CSS实现波浪效果

    width: 240px;height: 240px;background: #f13f84;border-radius: 50%;

    好的,如果 border-radius 没到 50%,但是接近 50% ,我们会得到一个这样的图形(注意边角,整个图形给人的感觉是有点圆,却不是很圆。)

    kl7Ay7d0WEaV5605.jpg

    CSS实现波浪效果

    width: 240px;height: 240px;background: #f13f84;border-radius: 40%;

    好的,那整这么个图形又有什么用?还能变出波浪来不成?

    我们让上面这个图形滚动起来(rotate) ,看看效果:

    CiXrZHh2j22H8L92.jpg

    CSS实现波浪效果

    @keyframes rotate{ from{transform: rotate(0deg)} to{transform: rotate(359deg)}}.ripple{ width: 240px; height: 240px; background: #f13f84; border-radius: 40%; animation: rotate 3s linear infinite;}

    可能很多人看到这里还没懂旋转起来的意图,仔细盯着一边看,是会有类似波浪的起伏效果的。

    而我们的目的,就是要借助这个动态变换的起伏动画,模拟制造出类似波浪的效果。

    实现

    当然,这里看到是全景实现图,所以感觉并不明显,OK,让我们用一个个例子看看具体实现起来能达到什么样的效果。

    我们利用上面原理可以做到的一种波浪运动背景效果图:

    Jj99rFS6ZrVzr1vS.jpg

    CSS实现波浪效果

    后面漂浮的波浪效果,其实就是利用了上面的 border-radius: 40% 的椭圆形,只是放大了很多倍,视野之外的图形都 是隐藏的 ,只留下了一条边的视野,并且增加了一些相应的transform 变换。

    可能有部分同学,还存在疑问,OK,那我们把上面的效果隐藏部分显示处理,将视野之外的动画也补齐,那么其实生成波浪的原理是这样的:

    EJqcQRqL36ZxJq4l.jpg

    CSS实现波浪效果

    图中的红色框就是我们实际的视野范围。

    值得注意的是,要看到,这里我们生成波浪,并不是利用旋转的椭圆本身,而是利用它去切割背景,产生波浪的效果。

    完整代码请点击下面“了解更多”。

    公告

    喜欢小编的点击关注,了解更多知识!

    演示地址页源码,请点击下方“了解更多”!

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 19:57:03 | 显示全部楼层
    人才
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:00:24 | 显示全部楼层
    转发了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:03:37 | 显示全部楼层
    转发了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:06:54 | 显示全部楼层
    大牛,ie8该怎么整这个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:10:08 | 显示全部楼层
    这个思路牛逼
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:12:48 | 显示全部楼层
    不错,思路很好,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:16:14 | 显示全部楼层
    溜溜溜!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:19:51 | 显示全部楼层
    有点东西
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-9-19 13:15
  • 签到天数: 16 天

    [LV.4]偶尔看看III

     楼主| 发表于 2018-10-30 20:22:09 | 显示全部楼层
    厉害
    回复 支持 反对

    使用道具 举报

    xml|2.xml|QQ3014497968|文章发布|签到|小黑屋|网赚论坛-致富项目网络赚钱平台 |网站地图

    GMT+8, 2019-10-18 04:12 , Processed in 0.180252 second(s), 14 queries , File On.

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表