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 相关文章推荐
javascript新手语法小结
Jun 15 Javascript
jQuery TextBox自动完成条
Jul 22 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
详解js闭包
Sep 02 Javascript
JS实现的数组全排列输出算法
Mar 19 Javascript
搞定immutable.js详细说明
May 02 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
详解Ant Design of React的安装和使用方法
Dec 27 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实现简单洗牌算法
2013/06/18 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
Javascript 继承实现例子
2009/08/12 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
python 利用栈和队列模拟递归的过程
2018/05/29 Python
Django 外键的使用方法详解
2019/07/19 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
Python使用python-docx读写word文档
2019/08/26 Python
如何基于python测量代码运行时间
2019/12/25 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
编程输出如下图形
2013/11/24 面试题
平面设计自荐信
2013/10/07 职场文书
中学生英语演讲稿
2014/04/26 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书