css系列:进度条

嚴華  金牌会员 | 2024-6-13 15:39:29 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 674|帖子 674|积分 2022

前言

技术来源于需求,近期遇到了做语音的需求,有个调解语速和音量的进度条,UI组件库的进度条大部分不支持拖动和点击修改当前进度,以是自己手写了一个。
实现思绪

MDN文档介绍
<input type="range"> - HTML(超文本标记语言) | MDN
input中type为range为进度条,然后做一些样式的修改和功能的加工封装为组件。
代码

  1. <template>
  2.   <div class="progress-container">
  3.     <!-- 原生进度条,底部完整进度条部分 -->
  4.     <input type="range" min="0" max="100" :value="currentProgress" :class="[rangeClass, 'silder']" />
  5.     <!-- 自我实现样式,当前进度部分 -->
  6.     <div :class="[progressClass,'progress-bar']"></div>
  7.   </div>
  8. </template>
  9. <script>
  10. export default {
  11.   props: {
  12.     // 一个页面用到多个此进度条组件的话要注意多个组件的类名要不同
  13.     // 灰色的整个进度条的类名
  14.     rangeClass: {
  15.       type: String,
  16.       default: "progress-range"
  17.     },
  18.     // 蓝色高亮的进度条的类名
  19.     progressClass: {
  20.       type: String,
  21.       default: "progress-bar"
  22.     },
  23.     // 当前进度
  24.     currentProgress: {
  25.       type: Number,
  26.     }
  27.   },
  28.   mounted () {
  29.     const silder = document.querySelector("." + this.rangeClass);
  30.     const progressBar = document.querySelector("." + this.progressClass);
  31.     let that = this
  32.     // 略微有点问题,偶发性会不触发绑定事件
  33.     silder.oninput = function () {
  34.       // 用来实时改变当前进度的宽度
  35.       progressBar.style.width = this.value + "%";
  36.       that.$emit('input', Number(this.value))
  37.     };
  38.   }
  39. };
  40. </script>
  41. <style lang="less" scoped>
  42. // less变量
  43. @height: 4px;
  44. @color: #3370ff;
  45. @borderRadius: 2px;
  46. .progress-container {
  47.   width: 100%;
  48.   position: relative;
  49.   margin-top: -3px;
  50.   .silder {
  51.     // -webkit是为了浏览器兼容
  52.     // 移除input的默认样式,下面这位博主有详细介绍
  53.     // https://blog.csdn.net/weixin_68127493/article/details/138463570
  54.     -webkit-appearance: none;
  55.     appearance: none;
  56.     width: 100%;
  57.     height: @height;
  58.     background: rgba(0, 0, 0, 0.12);
  59.     // 外边框,下面这位博主有详细介绍
  60.     // https://blog.csdn.net/XiugongHao/article/details/131898375
  61.     outline: none;
  62.     // 透明度
  63.     opacity: 0.7;
  64.     // 过渡效果,下面这位博主有详细介绍
  65.     // https://blog.csdn.net/qq_32594913/article/details/135915376
  66.     -webkit-transition: 0.2s;
  67.     transition: opacity 0.2s;
  68.     border-radius: @borderRadius;
  69.     // 鼠标移入时,透明度变为1
  70.     &:hover {
  71.       opacity: 1;
  72.     }
  73.     // 当前进度右侧尽头的圆圈,详细介绍参考以下网址
  74.     // https://cloud.tencent.com/developer/section/1072011
  75.     &::-moz-range-thumb {
  76.       width: 25px;
  77.       height: 25px;
  78.       background: @color;
  79.       cursor: pointer;
  80.     }
  81.   }
  82.   //   当前进度部分的样式
  83.   .progress-bar {
  84.     position: absolute;
  85.     top: 12px;
  86.     width: 50%;
  87.     height: @height;
  88.     background: @color;
  89.     border-radius: @borderRadius;
  90.   }
  91. }
  92. </style>
复制代码
结语

样式部分为笔者需求的样式,需要根据自己项目需要调解。
!!有个标题是偶发性绑定事件不触发,暂时还没解决,欢迎各人帮忙解决。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表