vue2.0+SVG实现音乐播放圆形进度条组件


Posted in Javascript onSeptember 21, 2019

vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果

vue2.0+SVG实现音乐播放圆形进度条组件

需求分析:

类似于大多数音乐播放器中等mini播放器控制按钮,显示播放进度,实时更新进度。

progress-circle.vue源码:

<template>
 <div class="progress-circle">
 <svg :width="radius" :height="radius" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <circle class="progress-background" r="50" cx="50" cy="50" fill="transparent"/>
  <circle class="progress-bar" r="50" cx="50" cy="50" fill="transparent" :stroke-dasharray="dashArray"
    :stroke-dashoffset="dashOffset"/>
 </svg>
 <slot></slot>
 </div>
</template>
 
<script type="text/ecmascript-6">
 export default {
 props: {
  radius: {
  type: String,
  default: '0.32rem'
  },
  percent: {
  type: Number,
  default: 0
  }
 },
 data() {
  return {
  dashArray: Math.PI * 100
  }
 },
 computed: {
  dashOffset() {
  return (1 - this.percent) * this.dashArray
  }
 }
 }
</script>
 
<style scoped lang="stylus" rel="stylesheet/stylus">
 .progress-circle
 position: relative
 circle
  stroke-width: 0.16rem
  transform-origin: center
  &.progress-background
  transform: scale(0.9)
  stroke: rgba(255, 205, 49, 0.5)
  &.progress-bar
  transform: scale(0.9) rotate(-90deg)
  stroke: #ffcd32
</style>

本组件没有使用本地资源,可直接只用,在父组件中导入并注册后,调用组件。
父组件DOM结构:

<div class="control">
 <progress-circle :radius="radius" :percent="percent">
  <i @click.stop="togglePlaying" class="icon-mini" :class="iconMiniPlay"></i>
 </progress-circle>
</div>

解释:其中<i></i>中引用的是制作的css图标(播放/暂停按钮),通过iconMiniPlay决定展现是播放按钮还是暂停按钮(本例子只介绍原型进图条组件的开发和使用,因此不多介绍),设置图标的大小务必注意与radius一致,不明白为什么的话建议尝试一下,实践出真知噢。

需要像组件传入的参数:

svg圈圈大小radius以及歌曲播放进度百分比percent,两个数据来源:

vue2.0+SVG实现音乐播放圆形进度条组件

解释:

percent通过audio标签的currentTime获取,duration为接口获取的当前歌曲总长度,相除则为当前进度百分比。

radius可根据自身开发时所需规格设置(其他布局、样式之类的也是)

父组件样式(本人使用stylus):

.control
 position absolute
 top 0.35rem
 right 1rem
 color $color-theme-d
 .icon-mini
 font-size: 0.64rem
 position: absolute
 left: 0
 top: 0

最近可以变听歌边开发了。

开发完并运用此组件,设置适当的布局、样式后的效果:

vue2.0+SVG实现音乐播放圆形进度条组件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 Javascript
JqGrid web打印实现代码
May 31 Javascript
js数组去重的常用方法总结
Jan 24 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
纯js实现悬浮按钮组件
Dec 17 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
Jan 29 Javascript
angular中的http拦截器Interceptors的实现
Feb 21 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 #Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 #jQuery
vue实现文件上传读取及下载功能
Nov 17 #Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 #Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 #Javascript
Vue使用NProgress进度条的方法
Sep 21 #Javascript
NProgress显示顶部进度条效果及使用详解
Sep 21 #Javascript
You might like
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
浅谈php和.net的区别
2014/09/28 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
javascript的BOM
2016/05/03 Javascript
几种响应式文字详解
2017/05/19 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python+pyqt5编写md5生成器
2019/03/18 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
心理健康教育制度
2014/01/27 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
教师暑期培训感言
2014/08/15 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python