微信小程序有旋转动画效果的音乐组件实例代码
作者:大众美男典范 发布时间:2024-05-02 16:11:35
在微信开发中,写过的一个简单的音乐播放组件,记录下。
music
音乐播放组件。
属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
music | String | 传入的音乐资源地址 | |
musicStyle | String | (随便写了个) | 音乐组件的样式 |
rotate | Boolean | true | 播放时是否有旋转效果 |
iconOn | String | (随便写了个) | 音乐播放时的icon地址 |
iconOff | String | (随便写了个) | 音乐暂停时的icon地址 |
代码
properties: {
// 音乐路径
music: {
type: String,
value: '',
observer: function (newVal) {
this._initMusic(newVal)
}
},
// 样式
musicStyle: {
type: String,
value: 'position: absolute; right: 20rpx; top: 20rpx; width: 100rpx; height: 100rpx;'
},
// 播放时是否有旋转效果
rotate: {
type: Boolean,
value: true
},
// 播放时的icon路径
iconOn: {
type: String,
value: '/resources/img/music-on.png' // 请填写默认的图片地址
},
// 暂停时的icon路径
iconOff: {
type: String,
value: '/resources/img/music-off.png' // 请填写默认的图片地址
}
}
初始化音乐
首先,在properties中接收页面传来的音乐文件地址,
music: {
type: String,
value: '',
observer: function (newVal) {
this._initMusic(newVal)
}
}
这里的处理是,一旦接收到页面传来的 music 地址,就初始化音乐:
_initMusic: function (newVal) {
// 当页面传来新的music时,先销毁之前的audioCtx,否则页面会很嗨
if (this.data.audioCtx) {
this.data.audioCtx.destroy()
}
if (newVal) {
var audioCtx = wx.createInnerAudioContext()
this.setData({
audioCtx: audioCtx
})
if (this.data.audioStatus == '1') {
audioCtx.autoplay = true
}
audioCtx.loop = true
audioCtx.src = newVal
}
}
audioStatus 用来记录音乐播放状态,在data中默认设置为1:
data: {
icon: '',
audioStatus: 1,
audioCtx: '',
musicClass: 'music-on'
}
wxml文件里,只用一个 <image> 标签:
<image class='music {{ rotate && musicClass }}'
style="{{ musicStyle }}"
src="{{ icon }}"
bindtap='_switch'
wx:if="{{ music }}"></image>
其中, icon 在组件ready()时赋值成播放状态的icon:
ready() {
this.setData({
icon: this.data.iconOn
})
}
音乐旋转效果
音乐播放时的旋转效果,是用css动画实现的,wxss文件如下:
.music {
position: absolute;
z-index: 99;
-webkit-animation-iteration-count: infinite;
}
/* 旋转class */
.music-on {
animation: music-rotate 4s linear infinite;
}
/* 旋转动画 */
@keyframes music-rotate {
0% {
transform: rotateZ(0deg);
}
100% {
transform: rotateZ(360deg);
}
}
当 rotate 为true时,使 musicClass 的值为 music-on,就能实现旋转了。
当然, musicClass 需要用 this.setData 的方式来切换值。
爆丑照:
音乐控制
手动切换
手动点击时,用取反的逻辑控制音乐的播放和暂停:
_switch: function () {
// 如果是播放就停止
if (this.data.audioStatus) {
this.setData({
audioStatus: 0,
icon: this.data.iconOff,
musicClass: ''
})
this.data.audioCtx.pause()
// 如果是停止就播放
} else {
this.setData({
audioStatus: 1,
icon: this.data.iconOn,
musicClass: 'music-on'
})
this.data.audioCtx.play()
}
}
其它情况
同时,还要对下列情况做处理:
分享时,进入选好友界面、音乐停止,分享回来后,音乐没有继续播放
从此页面跳转到下一个页面时,音乐还在继续
从此页面撤回到上一个页面时,音乐还在继续
解决的方法,是在组件的methods中又写了两个方法:
// 写在组件的methods中:
// 在引用组件页面的onShow()中调用
// 否则,如果当发生分享页面行为并返回时,音乐不会自动播放
onShow: function () {
if (this.data.music && this.data.audioStatus) {
this.data.audioCtx.play()
}
},
// 在引用组件页面的onHide()中调用
// 否则,在跳转到下一个页面后,音乐还在继续
onHide: function () {
if (this.data.music && this.data.audioStatus) {
this.data.audioCtx.pause()
}
this.setData({
animationData: {}
})
}
这两个方法分别在页面中的 onShow 和 onHide 中调用,调用方式就是父组件获取到子组件实例对象:
例如,给<music>组件加id为"music-componet",调用时就是:
// 写在调用页面中
onShow: function () {
this.selectComponent('#music-component').onShow()
},
onHide: function () {
this.selectComponent('#music-component').onHide()
}
最后,在组件的detached中也调用一下 onHide 方法:
// 页面关闭时销毁音乐
detached() {
this.onHide()
}
使用
你可以
通过阅读本文,根据自身实际情况写一个
或者,直接凑合用
总结
以上所述是小编给大家介绍的微信小程序有旋转动画效果的音乐组件网站的支持!
来源:https://www.cnblogs.com/best-xiaoqiang/archive/2018/08/21/9511435.html


猜你喜欢
- ul: unordered lists ol: ordered lists li: Listsol 有序列表:<ol>
- 写在前面在写go的时候经常用到序列化、反序列化,记录一下遇到过的坑。空指针会被解析成字符串"null"type Pers
- Python中的中文是个很头痛的问题,Python2和Python3都会出现,而且py2中出现的概率要大些。 有一道面试题: Py
- 解决办法: 1.新建一个同名的数据库(数据文件与原来的要一致) 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文
- (function($) { (function($) { $.preload = function(data, cfg) { return
- SQL Server 2000 清理日志精品教程SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志
- 使用router.meta.keepAlive对页面进行缓存需求:1. 从stockList页面到stockInfo页面,从stockInf
- help函数是python的一个内置函数(python的内置函数可以直接调用,无需import),它是python自带的函数,任何时候都可以
- Python来进行查询和替换一个文本字符串?可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, s
- 前言Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计
- 官网:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads我的系统
- 环境搭建1.首先需要自行安装node环境2.然后全局安装 expressnpm install -g express3.创建express项
- 一、安装node.js 官网下载下载地址:Download | Node.js(1)下载安装包安装过程很简单,全部next即可。(
- 准备工作: ① 首先要会使用ThinkPHP这个框架 ② 最好有些ajax的基础(可以去看下小飞的另外一篇博文:Ajax实时验证"
- 在这里输入命令:操作命令:1.更新Anaconda:conda update conda更新所有包conda update --all3.添
- xlsxwriter可能用过的人并不是很多,不过使用后就会感觉,他的功能让你叹服,除了可以按要求生成你所需要的excel外还可以加上很形象的
- 最近开发一套接口,写个Python脚本,使用requests.session模拟一下登录.因为每次需要获取用户信息,登录需要带着sessio
- 依次前移,实现聊友们的发言的更迭:function form1_onsubmit()if document.form1.
- 本文实例讲述了Python面向对象程序设计之类的定义与继承。分享给大家供大家参考,具体如下:定义类:class A: def _
- 本文实例为大家分享了python实现桌面壁纸切换功能的具体实现方法,供大家参考,具体内容如下大体分为两个部分一、利用爬虫爬取壁纸第一部分爬取