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 初体验(建议学习jquery)
Apr 25 Javascript
JavaScript 函数式编程的原理
Oct 16 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
Sep 01 Javascript
jQuery中odd选择器的定义和用法
Dec 23 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
js数据类型检测总结
Aug 05 Javascript
使用JavaScript保存文本文件到本地的两种方法
Jan 22 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
基于Vue CSR的微前端实现方案实践
May 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二维数组排序的函数分享
2014/01/17 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
layui文件上传实现代码
2017/05/20 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
python 项目目录结构设置
2020/02/14 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
工程专业毕业生自荐信范文
2013/12/25 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
个人廉政承诺书
2015/04/28 职场文书
贷款工作证明模板
2015/06/12 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书