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 相关文章推荐
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
通过javascript进行UTF-8编码的实现方法
Jun 27 Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
Vue 中对图片地址进行拼接的方法
Sep 03 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
详解python中的Turtle函数库
2018/11/19 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
在python里从协程返回一个值的示例
2019/02/19 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
个人自我评价范文
2014/02/05 职场文书
2014庆六一活动方案
2014/03/02 职场文书
法制宣传实施方案
2014/03/13 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
远程教育学习心得体会
2016/01/23 职场文书
vue中data里面的数据相互使用方式
2022/06/05 Vue.js