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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
javascript 另一种图片滚动切换效果思路
Apr 20 Javascript
html的DOM中document对象images集合用法实例
Jan 21 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
手机端js和html5刮刮卡效果
Sep 29 Javascript
vue.js实现插入数值与表达式的方法分析
Jul 06 Javascript
vue中使用vue-pdf的方法详解
Sep 05 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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
codeigniter中测试通过的分页类示例
2014/04/17 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
php文件上传类的分享
2017/07/06 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
jquery滚动加载数据的方法
2015/03/09 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
node获取客户端ip功能简单示例
2019/08/24 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
Python 处理图片像素点的实例
2019/01/08 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
应届毕业生求职信范文
2014/05/08 职场文书
先进班组事迹材料
2014/12/25 职场文书
小学校本教研总结
2015/08/13 职场文书
python tkinter模块的简单使用
2021/04/07 Python
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL