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 相关文章推荐
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
jQuery实现contains方法不区分大小写的方法
Feb 13 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
Bootstrap每天必学之弹出框(Popover)插件
Apr 25 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
mpvue+vant app搭建微信小程序的方法步骤
Feb 11 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
JavaScript实现登录窗体
Jun 22 Javascript
javascript对象3个属性特征
Nov 17 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
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
php文件包含的几种方式总结
2019/09/19 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python生成ppt的方法
2018/06/07 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python与mysql数据库交互的实现
2020/01/06 Python
高级电工工作职责
2013/11/21 职场文书
春节超市活动方案
2014/08/14 职场文书
班主任经验交流材料
2014/12/16 职场文书
2015年路政工作总结
2015/05/22 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL