写一个 拖拽进度组件

智码踏星使
• 阅读 1009

写一个 拖拽进度组件

<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>
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
九路 九路
4年前
一个爬虫的故事:这是人干的事儿?
本文转载自轩辕之风的文章,链接https://mp.weixin.qq.com/s/YygbUWpa2mbPZPuPNhdt2w爬虫原理我是一个爬虫,每天穿行于互联网之上,爬取我需要的一切。image.png(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/656d
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Js使用面向对象和面向过程的方法实现拖拽物体的效果
1.面向过程的拖拽实现代码:!(https://oscimg.oschina.net/oscnet/d680c759957babef2fec0902676eaa35ad9.gif)<!DOCTYPEhtml<html<head<titledragDiv</title
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。