微信小程序有旋转动画效果的音乐组件实例代码

在微信开发中,写过的一个简单的音乐播放组件,记录下。

music

音乐播放组件。

属性

normal; word-spacing: 0px; border-collapse: collapse; border-bottom: silver 1px solid; text-transform: none; font-weight: normal; color: rgb(0,0); padding-bottom: 0px; font-style: normal; text-align: left; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: silver 1px solid; orphans: 2; widows: 2; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px"> ottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"> ottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"> 效果

代码

rush:js;"> 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中接收页面传来的音乐文件地址,

rush:js;"> music: { type: String,observer: function (newVal) { this._initMusic(newVal) } }

这里的处理是,一旦接收到页面传来的 music 地址,就初始化音乐:

rush:js;"> _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:

rush:js;"> data: { icon: '',audioStatus: 1,audioCtx: '',musicclass: 'music-on' }

wxml文件里,只用一个 标签

rush:js;">

其中, icon 在组件ready()时赋值成播放状态的icon:

rush:js;"> ready() { this.setData({ icon: this.data.iconOn }) }

音乐旋转效果

音乐播放时的旋转效果,是用css动画实现的,wxss文件如下:

rush:js;"> .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 的方式来切换值。

爆丑照:

音乐控制

手动切换

手动点击时,用取反的逻辑控制音乐的播放和暂停:

rush:js;"> _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中又写了两个方法

rush:js;"> // 写在组件的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 中调用调用方式就是父组件获取到子组件实例对象:

例如,给组件加id为"music-componet",调用时就是:

rush:js;"> // 写在调用页面

onShow: function () {
this.selectComponent('#music-component').onShow()
},onHide: function () {
this.selectComponent('#music-component').onHide()
}

最后,在组件的detached中也调用一下 onHide 方法

rush:js;"> // 页面关闭时销毁音乐 detached() { this.onHide() }

使用

你可以

通过阅读本文,根据自身实际情况写一个

或者,直接

总结

以上所述是小编给大家介绍的微信小程序有旋转动画效果的音乐组件。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

相关文章

开发微信小程序的用户授权登录功能
小程序开发页面如何实现跳转?
浅谈小程序开发中蓝牙连接错误分析及解决方法
什么是小程序?它有哪些功能?
如何配置小程序开发项目结构?(教程)
怎么把自己的店加入小程序
ottom: silver 1px solid; padding-bottom: 3px; padding-top: 3px; padding-left: 3px; margin: 0px; border-left: silver 1px solid; padding-right: 3px">属性 类型 认值 说明