今天给大家介绍一个小算法,是在做音乐播放器的时候用到的
我们在使用不管是网易云还是QQ音乐的时候都会用到上一首,下一首吧
而且到播放列表第一首歌和最后一首歌的时候在点击上一首,下一首
又会跳到第一首和最后一首了吧
这是这么实现的呢
其实这个很简单嘛,两个if判断一下临界情况就完事了嘛
能有多难
比如我们假设播放列表list是一个数组(对象也无所谓,为了方便大家理解,数组比较好哈)
来一堆伪代码哈
//触发点击下一首事件时
if(index == (list.length - 1)){
index = 0;
}else{
index++;
}
//触发点击上一首事件时
if(index == 0){
index = list.length - 1;
} else {
index--;
}
index是当前歌曲的索引
不知道大家有没有理解,各位看官看一看哈
理解了接着说,你看看,两个判断不就完事了吗
但是,我们是有着伟大理想改变世界的搬砖工人
怎么能这么简单就结束了呢
接下来给大家介绍一个方便简洁的
var index = 0;
function getIndex(c){
curIndex = (index + c + list.length) % list.length;
index = curIndex;
}
我知道到这里肯定有人没看懂了
容我讲解一波
首先参数c呢是给上下按钮调用准备的
比如下一首你就调用getIndex(1)
上一首getIndex(-1)
然后赋值给当前的index就可以了
如果还没看懂得同学可以自己设置两组数自己推一推,其实就是利用取余数
这下是不会存在越界的情况的
so 这算是一个技巧吧
省去了部分if看起啦比较装逼哈
如果还是有同学没看懂,我这里贴上我写音乐播放器的控制切换的方法
帮助大家再理解理解
var ControlManager = function (length) {
this.length = length;
this.index = 0;
};
ControlManager.prototype = {
next: function () {
return this.getIndex(1);
},
prev: function () {
return this.getIndex(-1);
},
getIndex: function (c) {
var index = this.index,
len = this.length,
curIndex = (index + c + len) % len;
this.index = curIndex;
return curIndex;
}
};
这个函数就可以配合我的点击事件然后调用next/prev来切换index了