css如何实现波浪效果


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

$(function() {

    let canvas = $("canvas");

    let ctx = canvas[0].getContext('2d');

    let radians = (Math.PI / 180) * 180;

    let startTime = Date.now();

    let time = 2000;

    let clockwise = 1;

    let cp1x, cp1y, cp2x, cp2y;

 

    // 初始状态

    // ctx.bezierCurveTo(90, 28, 92, 179, 200, 100);

    // 末尾状态

    // ctx.bezierCurveTo(145, 100, 41, 100, 200, 100);

 

    requestAnimationFrame(function waveDraw() {

        let t = Math.min(1.0, (Date.now() - startTime) / time);

 

        if(clockwise) {

            cp1x = 90 + (55 * t);

            cp1y = 28 + (72 * t);

            cp2x = 92 - (51 * t);

            cp2y = 179 - (79 * t);

        } else {

            cp1x = 145 - (55 * t);

            cp1y = 100 - (72 * t);

            cp2x = 41 + (51 * t);

            cp2y = 100 + (79 * t);

        }

 

        ctx.clearRect(0, 0, 200, 200);

        ctx.beginPath();

        ctx.moveTo(0, 100);

        // 绘制三次贝塞尔曲线

        ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, 200, 100);

        // 绘制圆弧

        ctx.arc(100, 100, 100, 0, radians, 0);

        ctx.fillStyle = "rgba(154, 205, 50, .8)";

        ctx.fill();

        ctx.save();

 

        if( t == 1 ) {

            startTime = Date.now();

            clockwise = !clockwise;

        }

 

        requestAnimationFrame(waveDraw);

    });

})

web前端开发学习Q-q-u-n: 767273102 ,分享开发工具,零基础,进阶视频教程,希望新手少走弯路

主要是利用了动态绘制 ctx.bezierCurveTo() 三次贝塞尔曲线实现波浪的运动效果,感兴趣的可以自行研究。【推荐学习:css视频教程】

CSS实现波浪效果

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

原理

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

1

2

3

4

width: 240px;

height: 240px;

background: #f13f84;

border-radius: 50%;

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

1

2

3

4

width: 240px;

height: 240px;

background: #f13f84;

border-radius: 40%;

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

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

CSS实现波浪效果

1

2

3

4

5

6

7

8

9

10

11

@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,让我们用一个个例子看看具体实现起来能达到什么样的效果。

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

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

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

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

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

以上就是css如何实现波浪效果的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

css如何设置div的宽度

css font-family属性怎么用

css的属性有哪些

css优化策略介绍

html和css是语言吗

chrome css加载不出来怎么办

css怎么调整行距

css怎么实现禁止换行并超出隐藏

css实现图片左右翻转效果(附代码)

css padding属性怎么用

更多相关阅读请进入《css》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...