vue引用CSS样式实现手机充电效果

 更新时间:2024年01月05日 11:26:26   作者:范特西是只猫  
这篇文章主要介绍了vue引用CSS样式实现手机充电效果,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1. 实现效果

2. index.vue 页面

<template>
  <div class="home">
    <div class="body">
      <vab-charge :end-val="endVal" :start-val="startVal" />
    </div>
  </div>
</template>
<script>
  import VabCharge from '@/components/VabCharge'
export default {
  name: 'Demo',
  components: { VabCharge },
  data() {
    return {
      startVal: 0,
      endVal: 20,
      timeInterval: null,
    }
  },
  mounted() {
    this.timeInterval = setInterval(() => {
      if (this.endVal < 100) {
        this.startVal = this.endVal
        this.endVal++
      }
    }, 5000)
  },
  beforeDestroy() {
    if (this.clearInterval) {
      clearInterval(this.timeInterval)
    }
  },
  methods: {
  },
}
</script>
<style scoped lang="scss">
.home {
  .body {
    width: 890px;
    height: 500px;
    border: #00ffa2 solid 10px;
    box-sizing: border-box;
    // padding: 20px;
    box-sizing: border-box;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    .qrcode2 {
    }
  }
}
</style>

3. VabCharge.vue 组件代码

<template>
  <div class="content">
    <div class="g-container" :style="styleObj">
      <div class="g-number">
        {{ endVal }}
      </div>
      <div class="g-contrast">
        <div class="g-circle"></div>
        <ul class="g-bubbles">
          <li v-for="(item, index) in 15" :key="index"></li>
        </ul>
      </div>
    </div>
  </div>
</template>
<script>
  export default {
    name: 'VabCharge',
    props: {
      styleObj: {
        type: Object,
        default: () => {
          return {}
        },
      },
      startVal: {
        type: Number,
        default: 0,
      },
      endVal: {
        type: Number,
        default: 100,
      },
    },
    data() {
      return {
        decimals: 2,
        prefix: '',
        suffix: '%',
        separator: ',',
        duration: 3000,
      }
    },
    created() {},
    mounted() {},
    methods: {},
  }
</script>
<style lang="scss" scoped>
  .content {
    position: relative;
    display: flex;
    align-items: center; /* 垂直居中 */
    justify-content: center; /* 水平居中 */
    width: 100%;
    height: 100%;
    background: #000;
    .g-number {
      position: absolute;
      top: 27%;
      z-index: 99;
      width: 300px;
      font-size: 32px;
      color: #fff;
      text-align: center;
    }
    .g-container {
      position: relative;
      width: 300px;
      height: 400px;
      margin: auto;
    }
    .g-contrast {
      width: 300px;
      height: 400px;
      overflow: hidden;
      background-color: #000;
      filter: contrast(15) hue-rotate(0);
      animation: hueRotate 10s infinite linear;
    }
    .g-circle {
      position: relative;
      box-sizing: border-box;
      width: 300px;
      height: 300px;
      filter: blur(8px);
      &::after {
        position: absolute;
        top: 40%;
        left: 50%;
        width: 200px;
        height: 200px;
        content: '';
        background-color: #00ff6f;
        border-radius: 42% 38% 62% 49% / 45%;
        transform: translate(-50%, -50%) rotate(0);
        animation: rotate 10s infinite linear;
      }
      &::before {
        position: absolute;
        top: 40%;
        left: 50%;
        z-index: 99;
        width: 176px;
        height: 176px;
        content: '';
        background-color: #000;
        border-radius: 50%;
        transform: translate(-50%, -50%);
      }
    }
    .g-bubbles {
      position: absolute;
      bottom: 0;
      left: 50%;
      width: 100px;
      height: 40px;
      background-color: #00ff6f;
      filter: blur(5px);
      border-radius: 100px 100px 0 0;
      transform: translate(-50%, 0);
    }
    li {
      position: absolute;
      background: #00ff6f;
      border-radius: 50%;
    }
    @for $i from 0 through 15 {
      li:nth-child(#{$i}) {
        $width: 15 + random(15) + px;
        top: 50%;
        left: 15 + random(70) + px;
        width: $width;
        height: $width;
        transform: translate(-50%, -50%);
        animation: moveToTop #{random(6) + 3}s ease-in-out -#{random(5000) / 1000}s infinite;
      }
    }
    @keyframes rotate {
      50% {
        border-radius: 45% / 42% 38% 58% 49%;
      }
      100% {
        transform: translate(-50%, -50%) rotate(720deg);
      }
    }
    @keyframes moveToTop {
      90% {
        opacity: 1;
      }
      100% {
        opacity: 0.1;
        transform: translate(-50%, -180px);
      }
    }
    @keyframes hueRotate {
      100% {
        filter: contrast(15) hue-rotate(360deg);
      }
    }
  }
</style>

到此这篇关于vue通过CSS实现手机充电效果的文章就介绍到这了,更多相关vue手机充电内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mini-vue渲染的简易实现

    mini-vue渲染的简易实现

    本文主要介绍了mini-vue渲染的简易实现,主要简单来实现一个虚拟dom渲染真实dom,以及更新的方法。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Vue Router解决多路由复用同一组件页面不刷新问题(场景分析)

    Vue Router解决多路由复用同一组件页面不刷新问题(场景分析)

    这篇文章主要介绍了Vue Router解决多路由复用同一组件页面不刷新问题,多路由复用同一组件的场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Element-UI使用el-row高度设置方式

    Element-UI使用el-row高度设置方式

    这篇文章主要介绍了Element-UI使用el-row高度设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 关于vue3使用particles粒子特效的问题

    关于vue3使用particles粒子特效的问题

    这篇文章主要介绍了关于vue3使用particles粒子特效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Element InputNumber 计数器的实现示例

    Element InputNumber 计数器的实现示例

    这篇文章主要介绍了Element InputNumber 计数器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 为Vue3 组件标注 TS 类型实例详解

    为Vue3 组件标注 TS 类型实例详解

    这篇文章主要为大家介绍了为Vue3 组件标注 TS 类型实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • vue 项目地址去掉 #的方法

    vue 项目地址去掉 #的方法

    vue 项目往往会搭配 vue-router 官方路由管理器,它和 vue.js 的核心深度集成,让构建单页面应用变得易如反掌。这篇文章主要介绍了vue 项目地址去掉 #的方法,需要的朋友可以参考下
    2018-10-10
  • vue Router常用属性详解

    vue Router常用属性详解

    这篇文章主要介绍了vueRouter常用属性,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 基于Vue3+WebSocket实现实时文件传输监控系统

    基于Vue3+WebSocket实现实时文件传输监控系统

    WebSocket是一种在客户端和服务器之间进行双向通信的网络协议,它通过建立持久性的、全双工的连接,允许服务器主动向客户端发送数据,本文小编给大家介绍了基于Vue3+WebSocket实现实时文件传输监控系统,需要的朋友可以参考下
    2025-03-03
  • VUE html5-qrcode实现H5扫一扫功能实例

    VUE html5-qrcode实现H5扫一扫功能实例

    这篇文章主要给大家介绍了关于VUE html5-qrcode实现H5扫一扫功能的相关资料,html5-qrcode是轻量级和跨平台的QR码和条形码扫码的JS库,集成二维码、条形码和其他一些类型的代码扫描功能,需要的朋友可以参考下
    2023-08-08

最新评论