<template>  <div class="tool-bar" id="toolBar">    <div class="color-bar" id="colorBar">      <span class="mic-btn" id="micBtn"></span>    </div>  </div></template><script>export default {  data() {    return {      colorBar: null,      isTarget: false,      originalStart: 0,      originalEnd: 0,      start: 0,      end: 0,      percentage: 0,      totalWidth: 266,    }  },  mounted() {    this.colorBar = document.getElementById("colorBar")    this.toolBar = document.getElementById("toolBar")    document.onmousedown = this.onmousedownEvent    document.onmouseup = this.onmouseupEvent    document.onmousemove = this.onmousemoveEvent    document.onclick = this.onclickEvent    let rect = this.toolBar.getBoundingClientRect()    this.originalStart = rect.left    this.originalEnd = rect.left + this.totalWidth  },  methods: {    onmousedownEvent(e) {      if (e.target.id === "micBtn") {        this.isTarget = true      }    },    onmousemoveEvent(e) {      if (this.isTarget) {        let { clientX } = e        if (clientX > this.originalEnd) {          this.colorBar.style.width = "100%"        } else if (clientX < this.originalStart) {          this.colorBar.style.width = "0%"        } else {          this.percentage = (            (clientX - this.originalStart) /            this.totalWidth          ).toFixed(2)          this.colorBar.style.width = this.percentage * 100 + "%"        }      }    },    onmouseupEvent(e) {      if (this.isTarget) {        this.isTarget = false        this.$emit("percentChange", this.percentage)      }    },    onclickEvent(e) {      let target = e.target.id      if (target === "toolBar" || target === "colorBar") {        let { clientX } = e        this.percentage = (          (clientX - this.originalStart) /          this.totalWidth        ).toFixed(2)        this.colorBar.style.width = this.percentage * 100 + "%"        this.$emit("percentChange", this.percentage)      }    },  },}</script><style lang="scss" scoped>.tool-bar {  width: 266px;  margin-left: 15px;  height: 5px;  background: #ebebeb;  border-radius: 3px;  position: relative;  .color-bar {    position: absolute;    height: 5px;    top: 0;    left: 0;    border-radius: 3px;    background: linear-gradient(180deg, #4edc66 0%, #00c55d 100%);    width: 0%;  }  .mic-btn {    width: 12px;    height: 12px;    background: #ffffff;    box-shadow: 0px 0px 4px 0px rgba(0, 197, 93, 0.63);    border: 1px solid #00c55d;    position: absolute;    top: 50%;    right: 0;    transform: translateY(-50%);    border-radius: 50%;    cursor: pointer;  }}</style>