【Vue】条纹进度条

2023-05-16

一、效果演示及使用

 作为组件引入到项目(引入地址修改为自己实际的存放地址),注册到components

import stripeloading from "@/components/LSUI/loading/stripeloading";

components: {

    stripeloading

  },

 使用组件

      <stripeloading
        :width="300"
        :height="40"
        :process="60"
        process-color1="pink"
        process-color2="white"
        :stripe-spacing="50"
        :process-speed="5"
        :stripe-speed="5"
      />

通过对提供的参数修改,可以一定程度地自定义进度条样式

      <stripeloading
        :width="400"
        :height="100"
        :process="process"
        process-color1="orange"
        process-color2="white"
        :stripe-spacing="80"
        :process-speed="8"
        :stripe-speed="10"
      />

 提供使用的参数如下

props: {
    //进度条宽度
    width: {
      type: Number,
      default: 300,
    },
    //进度条高度
    height: {
      type: Number,
      default: 40,
    },
    //进度(1-100)
    process: {
      type: Number,
      default: 0,
    },
    //进度条颜色1
    processColor1: {
      type: String,
      default: "pink",
    },
    //进度条颜色2
    processColor2: {
      type: String,
      default: "white",
    },
    //条纹间距
    stripeSpacing: {
      type: Number,
      default: 50,
    },
    //进度条移动速度
    processSpeed: {
      type: Number,
      default: 5,
    },
    //条纹移动速度
    stripeSpeed: {
      type: Number,
      default: 5,
    },
  },

二、组件源码

<!--LSUI>条纹进度条-->
<template>
  <div>
    <div
      :style="{
        width: `${bdW}px`,
        height: `${bdH}px`,
        border: `${bdL}px solid ${bdColor}`,
        borderRadius: `${bdBorderRadius}px`,
        background: bdbgColor,
      }"
      class="border"
    >
      <div
        :style="{
          width: `${contentW}%`,
          height: '100%',
          borderRadius: `${contentBorderRadius}px`,
          transition: `${processMoveTime}s`,
          paddingLeft: `-${bdL + 10}px`,
        }"
        class="content"
      >
        <div
          :style="{
            width: `${contentInW}px`,
            height: '100%',
            background: contentColorGroup,
            backgroundSize: `${contentSpacing}px ${contentSpacing}px`,
            transform: `translate(-${contentInW / 3}px, 0)`,
            animationDuration: `${processBgMoveTime}s`,
          }"
          class="content_in"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "stripeloading",
  props: {
    //进度条宽度
    width: {
      type: Number,
      default: 300,
    },
    //进度条高度
    height: {
      type: Number,
      default: 40,
    },
    //进度(1-100)
    process: {
      type: Number,
      default: 0,
    },
    //进度条颜色1
    processColor1: {
      type: String,
      default: "pink",
    },
    //进度条颜色2
    processColor2: {
      type: String,
      default: "white",
    },
    //条纹间距
    stripeSpacing: {
      type: Number,
      default: 50,
    },
    //进度条移动速度
    processSpeed: {
      type: Number,
      default: 5,
    },
    //条纹移动速度
    stripeSpeed: {
      type: Number,
      default: 5,
    },
  },
  components: {},
  data() {
    return {
      bdW: 300, //边框宽度
      bdH: 40, //边框高度
      bdL: 10, //边框厚度
      bdColor: "#ccc", //边框颜色
      bdbgColor: "#eee", //边框背景颜色
      contentW: 4, //内容宽度
      contentColor1: "pink", //内容颜色1
      contentColor2: "white", //内容颜色2
      contentSpacing: 50, //条纹间距
      processMoveTime: 3, //进度条移动时长
      processBgMoveTime: 5, //进度条背景移动时长
    };
  },
  computed: {
    //边框弧度
    bdBorderRadius() {
      return this.bdH / 2;
    },
    //内容弧度
    contentBorderRadius() {
      return (this.bdH - 2 * this.bdL) / 2;
    },
    //内容斜条纹
    contentColorGroup() {
      let bgStyle =
        "linear-gradient(45deg," +
        this.contentColor1 +
        " 25%," +
        this.contentColor2 +
        " 0%," +
        this.contentColor2 +
        " 50%," +
        this.contentColor1 +
        " 0%," +
        this.contentColor1 +
        " 75%," +
        this.contentColor2 +
        " 0%" +
        ")";
      return bgStyle;
    },
    contentInW() {
      let contentInMinW =
        Math.ceil(this.bdW / this.contentSpacing) * this.contentSpacing;
      return Math.max(this.contentSpacing, contentInMinW) * 3;
    },
  },
  watch: {
    process: {
      handler(val, oldVal) {
        this.contentW = Math.min(val, 100);
      },
      deep: true,
      immediate: true,
    },
  },
  created() {
    this.init();
  },
  methods: {
    init() {
      this.bdW = this.width;
      this.bdH = this.height;
      this.contentW = Math.min(this.process, 100);
      this.contentColor1 = this.processColor1;
      this.contentColor2 = this.processColor2;
      this.contentSpacing = this.stripeSpacing;
      this.processMoveTime = 15 / this.processSpeed;
      this.processBgMoveTime = 25 / this.stripeSpeed;
    },
  },
};
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.border {
  overflow: hidden;
}
.content {
  overflow: hidden;
}
.content_in {
  animation-name: move;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
}
@keyframes move {
  100% {
    transform: translate(0px, 0);
  }
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Vue】条纹进度条 的相关文章

  • 编程实现字符串连接函数strcat()

    按如下函数原型编程实现字符串连接函数strcat 的功能 void MyStrcat char dstStr char srcStr 输入提示信息 xff1a Input a string Input another string 输入字符
  • UDP通讯

    目录 利用DatagramSocket发送和接收UDP数据报 DatagramPacket构造方法说明 利用DatagramPacket和Datagramsocket简单实现服务器和客户端的通信 UDP协议通讯的用户状态跟踪 利用Datag

随机推荐

  • ubuntu 下C/C++文件编写

    1 Ubuntu下c cpp文件 1 1 cmake方式编译 cmake通常建立CmakeLists txt xff0c 通过cmake命令生成makefile文件编译工程 文件内容 xff1a span class token numbe
  • C语言基础入门:链表详解篇

    链表概述 链表是一种常见的重要的数据结构 它是动态地进行存储分配的一种结构 它可以根据需要开辟内存单元 链表有一个 头指针 变量 xff0c 以head表示 xff0c 它存放一个地址 该地址指向一个元素 链表中每一个元素称为 结点 xff
  • Linux c udp广播

    文章目录 1 对比2 代码2 1 服务端2 2 客户端 1 对比 服务端 xff1a 需要利用这个函数开发套接字的发广播权限 xff0c 并且需要客户端地址绑定为广播地址 span class token function setsocke
  • React—— HelloWorld

    React 学习笔记 Hello WorldJSX JavaScript XML 语法规则JavaScript 语法函数组件 类组件 amp 属性 props组合组件 生命周期函数 xff08 不全 xff09 amp 状态 state事件
  • Linux下makefile 编译项目

    文章目录 1 规划makefile编写2 makefile文件2 1 根目录下common mk2 2 config mk2 3 根目录makefile 2 4 其他目录下 1 规划makefile编写 a 根目录下放三个文件 xff1a
  • RPLIDAR激光雷达测试

    本文主要介绍PRLIDAR A2M8 R2激光雷达的的测试过程 关于该激光雷达的具体参数和描述 xff0c 可以直接去官网查询 本文的测试环境为Ubantu16 04 ROS xff08 kinetic xff09 关于Ubantu16 0
  • 【ROS机器人入门】1.1 ROS概念及环境配置

    文章目录 ROS设计目标系统要求配置步骤1 设置安装源2 设置ROS软件Key3 更新软件包4 安装完整版ROS Noetic软件5 配置ROS环境6 安装构建依赖7 1 安装rosdep 7 1与7 2任选其一 解决方法 7 2 安装ro
  • 纯C语言进行Get和Post请求(亲测)

    废话不多说 xff0c 直接上代码 span class token macro property span class token directive hash span span class token directive keywor
  • C++ 实现Get和Post请求(亲测)

    废话不多说 xff0c 直接上代码 span class token comment include lt stdlib h gt span span class token macro property span class token
  • php 接入海康平台

    php获取海康平台的监控流地址 先获取所有监控点 xff08 artemis api resource v1 cameras xff09 在根据监控点的cameraIndexCode请求 artemis api video v1 camer
  • [开源]一个面向数仓开发人员的低代码工具,零代码开发API服务

    一飞开源 xff0c 介绍创意 新奇 有趣 实用的免费开源应用 系统 软件 硬件及技术 xff0c 一个探索 发现 分享 使用与互动交流的开源技术社区平台 致力于打造活力开源社区 xff0c 共建开源新生态 xff01 一 开源项目简介 介
  • (14)Ubuntu 安装 velodyne 激光雷达的Ros驱动包

    1 安装ROS驱动 xff1a sudo apt get install ros kinetic velodyne 2 创建ROS工程 xff1a mkdir p catkin velodyne src cd catkin velodyne
  • (2)ROS终端出现没有那个文件或目录,解决每次都要source问题

    1 在创建完程序包后需要 source catkin ws devel setup bash 即解决每次都要source方法 在终端输入 xff1a gedit bashrc 在文件末尾添加一下这一行 xff0c 保存即可 xff1a so
  • (3)GNSS在ROS中数据获取与解析

    1 在ubuntu16 04中安装串口工具minicom 输入sudo minicom s进行串口配置 xff1a 弹出如下设置界面 xff1a 使用方向键 选择 Serial port setup xff0c 按Enter键 xff0c
  • 一篇文章搞定Github API 调用 (v3)

    收藏 segmentfault 作者 SolomonXie 文章 xff1a 一篇文章搞定Github API 调用 v3 xff09
  • (3)安装ROS报错sh: 0: Illegal option -h解决办法及国内源ROS安装教程

    从ROS官网安装ROS报错 sh 0 Illegal option h 可能是软件源的原因 xff0c 使用国内的软件源可以解决此问题 1 安装软件源 xff0c 建议采用国内软件源 xff0c 下面的为USTC的软件源 sudo sh c
  • (1)robot_pose_ekf扩展卡尔曼滤波功能包的使用方法

    这里写自定义目录标题 robot pose ekf功能包的编译安装如何使用机器人姿势EKF 编译运行robot pose ekf订阅的话题发布的话题机器人姿态ekf如何工作参考文章 robot pose ekf功能包的编译安装 ros wi
  • (15)sudo rosdep init报错的解决方式及rosdep update解决方案

    Ubuntu16 04下安装ROS时 xff0c 执行到sudo rosdep init这一步时会遇到问题 xff0c 如下图所示 xff1a 解决办法 xff1a 步骤一 xff1a 1 查询现有真实IP 输入网址 xff1a IPAdd
  • (16)Ubuntu下PCL库安装和测试程序

    安装PCL库 PCL库Github下载地址 xff1a https github com PointCloudLibrary pcl 安装依赖项 xff1a sudo add apt repository ppa v launchpad j
  • 【Vue】条纹进度条

    一 效果演示及使用 作为组件引入到项目 xff08 引入地址修改为自己实际的存放地址 xff09 xff0c 注册到components import stripeloading from 34 64 components LSUI loa