Home  >  Article  >  Web Front-end  >  How to achieve progress bar effect in css3

How to achieve progress bar effect in css3

Guanhui
Guanhuiforward
2020-06-23 18:10:373127browse

How to achieve progress bar effect in css3

During the project process, I began to use the requestAnimationFrame method of js to implement the progress bar, but it greatly affected the performance when there was a lot of data, so I switched to css to implement and optimize it.

Post the code first:

<!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>

Effect picture (copy the code to see the dynamic effect):

Under normal circumstances, the percentage must be It is calculated based on the background data, so it is passed in dynamically. The vue code is posted below

Progress bar subcomponent (progress.vue):

<template>
  <p class="process-wrapper" :class="{&#39;addGray&#39;:addGray}">
    <p class="process-child" ref="processChild">
      <p class="process-animate" :class="{&#39;addGray&#39;: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>

Parent component call:

<!-- 进度条 -->
 <Progress :addGray="inactive" :progressWidth="progressWidth"></Progress>

Look at the actual effect:

Recommended tutorial: "CSS Tutorial"

The above is the detailed content of How to achieve progress bar effect in css3. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete