Array.prototype.indexOf

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//参数item:必选项,要查找的Array对象中的一子项
//参数i:可选项。该整数值指出在Array对象内开始查找的索引。如果省略,则从字符串的开始处查找。
if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
//alert("prototyping...");
//因为"||"或运算符是短路运算,就是当左边为true时不会去执行右边,直接就返回true,只有当左边为false时才会执行,也就是说除非以下情况才会执行i=0;
1.没有给indexOf传递参数i,比如array.indexOf(item);
2.i = 0、空字符串("")、undefined、null、NaN、false
i || (i = 0);
//这行显然就是得到数组的长度 var length = this.length;
//如果传的i<0,那么查找位置就从length+i开始查找,这里其实还要做个判断,i不能小于-length;不然i = length + i;还是小于0
if (i < 0) i = length + i;
//这里就是从i位置开始查找item for (; i < length; i++)
//找到就返回item在Array中的位置
if (this[i] === item) return i;
//找不到就返回-1 return -1;
};
</script>
</body>
</html>

转载于:https://www.cnblogs.com/xiaozhishang/p/4809452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
帮我分析下下面代码的结构跟实现技术 <div id="cd-icon"> <div class="cd-img"></div> <div class="music-list"> <ul> <li class="song">歌曲1</li> <li class="song">歌曲2</li> <li class="song">歌曲3</li> </ul> </div> </div> <audio id="audio" src="./audio/music1.mp3" autoplay></audio>/* js */ // 音乐唱片 (function () { const cdIcon = document.getElementById('cd-icon'); const cdImg = document.querySelector('.cd-img'); const musicList = document.getElementsByClassName('music-list'); const audio = document.getElementById('audio'); let isPlaying = false; const musics = [ './audio/music1.mp3', './audio/music2.mp3', './audio/music3.mp3', ]; let currentSongIndex = 0; console.log(musicList[0].classList); function playSong() { audio.src = musics[currentSongIndex]; audio.play(); let songElements = document.querySelectorAll('.song'); songElements.forEach(function (songElement) { songElement.classList.remove('cur-song'); }); songElements[currentSongIndex].classList.add('cur-song'); } cdIcon.addEventListener('mouseover', function () { musicList[0].classList.add('show'); }); cdIcon.addEventListener('mouseout', function () { musicList[0].classList.remove('show'); }); cdImg.addEventListener('click', function () { if (isPlaying) { audio.pause(); } else { audio.play(); } }); musicList[0].addEventListener('click', function (e) { if (e.target.tagName === 'LI') { let index = Array.prototype.indexOf.call(e.target.parentNode.children, e.target); currentSongIndex = index; playSong(); } }); audio.addEventListener('play', function () { isPlaying = true; cdImg.classList.add('playing'); }); audio.addEventListener('pause', function () { isPlaying = false; cdImg.classList.remove('playing'); }); audio.addEventListener('ended', function () { currentSongIndex++; if (currentSongIndex >= musics.length) { currentSongIndex = 0; } playSong(); }); playSong(); })();
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值