css3 如何实现进度条效果


本文摘自PHP中文网,作者Guanhui,侵删。

项目过程中,开始使用了js的requestAnimationFrame方法实现进度条,但是在数据超级多的时候非常影响性能,如此改用css去实现,优化。

先贴代码:

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

<!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 type="text/css">

        *{margin: 0;padding: 0}

  

        .box{width: 100px;height: 10px;border-radius: 10px;background: #999;margin: 100px auto;border: 1px solid #ff6780;}

        .child{position: relative;height:100%;border-radius:inherit;}

  

        .process-animate{background: #ff6780;position: absolute;left: 0;top: 0;bottom: 0;border-radius:inherit;

            animation: process 1s linear forwards ;

        }

        @keyframes process

        {

            0%{

                left:0;right:100%;

            }

            20%{

                right:80%

            }

            40%{

                right:60%;

            }

            60%{right:40%;}

            80%{right:20%;}

            100%{right:0;}

        }

     

    </style>

</head>

<body>

    <p class="box">

        <p class="child" style="width:50%"> // child的百分比就是进度条的占比效果

            <p class="process-animate"></p>

        </p>

    </p>

</body>

</html>

效果图(复制代码可查看动态效果):

正常情况下,百分比肯定是根据后台数据进行计算得出的,所以是动态传入的,下面贴vue代码

进度条子组件(progress.vue):

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

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

<template>

  <p class="process-wrapper" :class="{'addGray':addGray}">

    <p class="process-child" ref="processChild">

      <p class="process-animate" :class="{'addGray':addGray}"></p>

    </p>

  </p>

</template>

  

<script>

export default {

  props: {

    addGray: {

      //置灰

      type: Boolean,

      default: false

    },

    progressWidth: {

      //进度条百分比

      type: Number,

      default: 0

    }

  },

  mounted() {

    this.$nextTick(() => {

      console.log(this.addGray, "addGray---");

      this.$refs.processChild.style.width = this.progressWidth + "%"//动态改变进度条

      // this.$refs.processChild.style.width = 90 + "%"; 测试效果

    });

  }

};

</script>

  

<style lang="scss" scoped>

.process-wrapper {

  width: 1.98rem;

  height: 0.13rem;

  margin: 0.12rem 0 0.1rem 0;

  border-radius: 0.1rem;

  background: #fff;

  border: 0.01rem solid #ff6780;

  &.addGray {

    background: #999;

    border: 0.01rem solid #999;

  }

  .process-child {

    position: relative;

    height: 100%;

    // width: 100%;  //这个width就是动态变化。通过js改变

    border-radius: inherit;

    .process-animate {

      background: #ff6780;

      position: absolute;

      left: 0;

      top: 0;

      bottom: 0;

      border-radius: inherit;

      animation: process 1s linear forwards;

      &.addGray {

        background: #999 !important;

        // border: 0.01rem solid #999;

      }

    }

  }

}

  

@keyframes process {

  0% {

    left: 0;

    right: 100%;

  }

  20% {

    right: 80%;

  }

  40% {

    right: 60%;

  }

  60% {

    right: 40%;

  }

  80% {

    right: 20%;

  }

  100% {

    right: 0;

  }

}

</style>

父组件调用:

1

2

<!-- 进度条 -->

 <Progress :addGray="inactive" :progressWidth="progressWidth"></Progress>

看看实际效果:

推荐教程:《CSS教程》

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

相关阅读 >>

用h5和CSS3制作全屏背景轮换播放教程

CSS3新特性有哪些

text-wrap属性怎么使用

text-emphasis属性有什么用

CSS3实现文字折纸效果的方法(代码示例)

transform-origin属性怎么用

CSS3 如何画圆

CSS3多媒体查询的简单介绍(代码示例)

使用CSS3模拟打字效果(代码实例)

animation-timing-function属性有什么用

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




打赏

取消

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

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

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

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

评论

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