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打造TabPanel效果代码
May 22 Javascript
web页面数据展示新想法(json)
Jun 08 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
Dec 16 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
requireJS模块化实现返回顶部功能的方法详解
Oct 16 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
JavaScript相等运算符的九条规则示例详解
Oct 20 Javascript
在pycharm中开发vue的方法步骤
Mar 04 Javascript
TypeScript 内置高级类型编程示例
Sep 23 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
php 时间计算问题小结
2009/01/04 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
英语演讲稿范文
2014/01/03 职场文书
厕所文明标语
2014/06/11 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
Python基础之元类详解
2021/04/29 Python