JavaScript实现音乐导航效果


Posted in Javascript onNovember 19, 2020

本文实例为大家分享了JavaScript实现音乐导航效果的具体代码,供大家参考,具体内容如下

效果展示

JavaScript实现音乐导航效果

鼠标在导航栏上移动,每一项发出一种音符(do re mi fa so la xi),同样键盘上的1-7数字也可以有同样的效果。

资源下载

音乐导航(缓动动画、会唱歌的导航)

代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>音乐导航</title>
 <style>
 * {
  margin: 0;
  padding: 0;
  list-style: none;
  border: 0;
 }
 #nav {
  width: 706px;
  height: 40px;
  border: 1px solid #ccc;
  margin: 100px auto;
  overflow: hidden;
 }
 #nav ul {
  width: 710px;
 }
 #nav ul li {
  float: left;
  width: 100px;
  text-align: center;
  line-height: 40px;
  border-right: 1px dashed #ccc;
  position: relative;
 }
 #nav ul li a { /* a 标签填充整个 li */
  width: 100%;
  height: 100%;
  display: inline-block;
 }
 a {
  text-decoration: none;
  color: #000000;
 }
 span {
  width: 100px;
  height: 40px;
  background: skyblue;
  position: absolute;
  left: 0;
  top: 40px;
  z-index: -1;
 }
 </style>
</head>
<body>
 <nav id="nav">
 <ul id="ul">
  <li><a href="">千千音乐</a><span></span><audio src=" source/a1.mp3"></audio></li>
  <li><a href="">echo回声</a><span></span><audio src=" source/a2.mp3"></audio></li>
  <li><a href="">酷狗音乐</a><span></span><audio src=" source/a3.mp3"></audio></li>
  <li><a href="">QQ音乐</a><span></span><audio src=" source/a4.mp3"></audio></li>
  <li><a href="">酷我音乐</a><span></span><audio src=" source/a5.mp3"></audio></li>
  <li><a href="">网易云音乐</a><span></span><audio src=" source/a6.mp3"></audio></li>
  <li><a href="">虾米音乐</a><span></span><audio src=" source/a7.mp3"></audio></li>
 </ul>
 </nav>
<script src="js/myFunc.js"></script>
<script>
 window.onload = function () {
 // 1.获取标签
 var ul = $("ul");
 var allLis = ul.children;

 // 2.监听鼠标进入 li 标签
 for(var i=0; i<allLis.length; i++){
  allLis[i].onmouseover = function () {
  // 2.1 缓动动画
  buffer(this.children[1], {"top": 0});

  // 2.2 播放音符
  this.children[2].play();
  this.children[2].currentTime = 0;
  };

  // 2.3 监听鼠标离开
  allLis[i].onmouseout = function () {
  buffer(this.children[1], {"top": 40});
  };

  // 3.监听键盘的点击(1-7分别代表 do re mi fa so la xi)
  document.onkeydown = function (event) {
  var e = event || window.event;
  // console.log(e.keyCode);

  var keyCode = e.keyCode -49;
  buffer(allLis[keyCode].children[1], {"top": 0}, function () {
   buffer(allLis[keyCode].children[1], {"top": 40})
  })

  // 2.2 播放音符
  allLis[keyCode].children[2].play();
  allLis[keyCode].children[2].currentTime = 0;
  }
 }
 }
</script>
</body>
</html>

js/myFunc.js

function $(id) {
 return typeof id === "string" ? document.getElementById(id) : null;
}

/**
 * 缓动动画函数
 * @param obj
 * @param json
 * @param fn
 */
function buffer(obj, json, fn) {
 // 1.1 清除定时器
 clearInterval(obj.timer);

 // 1.3 设置定时器
 var begin = 0, target = 0, speed = 0;
 obj.timer = setInterval(function () {
 // 1.3.0 标记
 var flag = true;
 for(var k in json){
  // 1.3.1 求出初始值
  if("opacity" === k){ // 透明度
  console.log(getCssStyleAttr(obj, k));
  begin = Math.round(parseFloat(getCssStyleAttr(obj, k)) * 100) || 100; // 获取 CSS 样式值
  target = parseInt(json[k] * 100);
  }else if("scrollTop" === k){
  begin = Math.ceil(obj.scrollTop);
  target = parseInt(json[k]);
  }else { // 其他情况
  begin = parseInt(getCssStyleAttr(obj, k)) || 0; // 获取 CSS 样式值
  target = parseInt(json[k]);
  }
  // console.log(begin, target);

  // 1.4 求出步长
  // 缓动动画原理:盒子本身的位置 + 步长(不断变化的,由大变小)
  // 步长:begin = begin + (end - begin) * 缓动系数
  speed = (target - begin) * 0.2;

  // 1.6 判断是否向上取整
  speed = (target > begin) ? Math.ceil(speed) : Math.floor(speed);

  // 1.5 移动起来
  if("opacity" === k){ // 透明度
  // w3c 的浏览器
  obj.style.opacity = (begin + speed) / 100;
  // ie
  obj.style.filter = "alpha(opacity=" + (begin + speed) +")";
  }else if("scrollTop" === k){
  obj.scrollTop = begin + speed;
  }else {
  obj.style[k] = begin + speed + "px";
  }


  // 1.7 判断
  if(begin !== target){
  flag = false;
  }
 }
 // 1.8 清除定时器
 if(flag){
  clearInterval(obj.timer);

  // 判断有没有回调函数
  if(fn){
  fn()
  }
 }
 }, 20)
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
JS中的作用域链
Mar 01 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
微信小程序实现pdf、word等格式文件上传的方法
Sep 10 Javascript
JavaScript实现无限轮播效果
Nov 19 #Javascript
微信小程序实现分页加载效果
Nov 19 #Javascript
vue-drawer-layout实现手势滑出菜单栏
Nov 19 #Vue.js
H5 js点击按钮复制文本到粘贴板
Nov 19 #Javascript
JS数据类型分类及常用判断方法
Nov 19 #Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 #Javascript
javascript this指向相关问题及改变方法
Nov 19 #Javascript
You might like
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
python操作mysql数据库
2017/03/05 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
大学生个人自我鉴定
2013/12/03 职场文书
农村婚礼主持词
2014/03/13 职场文书
2014年居委会工作总结
2014/12/09 职场文书
春风化雨观后感
2015/06/11 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Python中使用ipython的详细教程
2021/06/22 Python