jQuery---钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件)

钢琴案例

(按下1-9数字键,能触发对应的mouseenter事件)

1. 结合之前的学习,主要内容,就是on注册keyup事件,函数里传入e, 用e.keyCode,来获取1-9的数字的范围。

如果所按的按键在49-57的范围里,就去触发mouseenter(or mouseleave)事件。

怎么触发呢?让.nav li的索引下标等于(code-49)

2. 设置节流阀

      //弹起的时候,触发mouseleave事件
      $(document).on("keyup", function (e) {
        // flag = true;
        // //获取到按下的键
        var code = e.keyCode;
        if (code >= 49 && code <= 57) {
          //触发对应的li的mouseleave事件
          $(".nav li").eq(code - 49).mouseleave();
        }
      });

下面的代码是有bug的

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      list-style: none;
    }

    .nav {
      width: 900px;
      height: 60px;
      background-color: black;
      margin: 0 auto;
    }

    .nav li {
      width: 100px;
      height: 60px;
      /*border: 1px solid yellow;*/
      float: left;
      position: relative;
      overflow: hidden;
    }

    .nav a {
      position: absolute;
      width: 100%;
      height: 100%;
      font-size: 24px;
      color: white;
      text-align: center;
      line-height: 60px;
      text-decoration: none;
      z-index: 2;
    }

    .nav span {
      position: absolute;
      width: 100%;
      height: 100%;
      background-color: yellow;
      top: 60px;
    }
  </style>
  <script src="../jquery-1.12.4.js"></script>
  <script>
    $(function () {
      //给li注册鼠标进入事件,让li下面的span top:0  播放音乐
      $(".nav li").mouseenter(function () {
        $(this).children("span").stop().animate({ top: 0 });
        //播放音乐
        var idx = $(this).index();
        $(".nav audio").get(idx).load();
        $(".nav audio").get(idx).play();
      }).mouseleave(function () {
        $(this).children("span").stop().animate({ top: 60 });
      });

      //节流阀  :按下的时候,触发,如果没弹起,不让触发下一次
      //1. 定义一个flag
      var flag = true;

      //按下1-9这几个数字键,能触发对应的mouseenter事件
      $(document).on("keydown", function (e) {
        if (flag) {
          flag = false;
          //获取到按下的键
          var code = e.keyCode;
          if (code >= 49 && code <= 57) {
            //触发对应的li的mouseenter事件
            $(".nav li").eq(code - 49).mouseenter();
            // }
          }
        };
      });

      //弹起的时候,触发mouseleave事件
      $(document).on("keyup", function (e) {
        flag = true;
        //获取到按下的键
        var code = e.keyCode;
        if (code >= 49 && code <= 57) {
          //触发对应的li的mouseleave事件
          $(".nav li").eq(code - 49).mouseleave();
        }
      });
    });
  </script>
</head>

<body>
  <div class="nav">
    <ul>
      <li>
        <a href="javascript:void(0);">导航1</a>
        <span></span>
      </li>
      <li><a href="javascript:void(0);">导航2</a><span></span></li>
      <li><a href="javascript:void(0);">导航3</a><span></span></li>
      <li><a href="javascript:void(0);">导航4</a><span></span></li>
      <li><a href="javascript:void(0);">导航5</a><span></span></li>
      <li><a href="javascript:void(0);">导航6</a><span></span></li>
      <li><a href="javascript:void(0);">导航7</a><span></span></li>
      <li><a href="javascript:void(0);">导航8</a><span></span></li>
      <li><a href="javascript:void(0);">导航9</a><span></span></li>
    </ul>

    <div>
      <audio src="mp3/1.ogg"></audio>
      <audio src="mp3/2.ogg"></audio>
      <audio src="mp3/3.ogg"></audio>
      <audio src="mp3/4.ogg"></audio>
      <audio src="mp3/5.ogg"></audio>
      <audio src="mp3/6.ogg"></audio>
      <audio src="mp3/7.ogg"></audio>
      <audio src="mp3/8.ogg"></audio>
      <audio src="mp3/9.ogg"></audio>
    </div>
  </div>
</body>

</html>

原文地址:https://www.cnblogs.com/jane-panyiyun/p/12259588.html

时间: 2024-10-11 05:10:23

jQuery---钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件)的相关文章

jQuery常用案例总结

模态对话框 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>test</title> 6 <style> 7 .field{ 8 z-index: 1; 9 } 10 .cover{ 11 display: none; 12 z-index: 2; 13 position:

jquery过滤特殊字符及js字符串转为数字

//替换特殊字符 $(this).val($(this).val().replace(/[~'!<>@#$%^&*()-+_=:]/g, "")); 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number). 一些示

jquery简单案例

昨天写了一篇关于jquery选择器的学习的记录,后边发现关于jquery的学习不能只依靠简单的文档,必须动手写出一些实际的东西,这样会学习的更好,今天呢,就给大家带来利用jquery实现文字和图片提示的效果. jquery文字提示 先看下效果: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> <title>

基于jQuery的input输入框下拉提示层(自动邮箱后缀名)

基于jQuery的input输入框下拉提示层,方便用户输入邮箱时的提示信息,需要的朋友可以参考下 效果图 // JavaScript Document (function($){ $.fn.extend({ "changeTips":function(value){ value = $.extend({ divTip:"" },value) var $this = $(this); var indexLi = 0; //点击document隐藏下拉层 $(docum

一个jquery在不同浏览器下的兼容性问题。

<div id ='pdiv' style='visibility:hidden;'> <div id='cdiv'>子元素</div> </div> 以上HTML. 父div设置了visibility为hidden.当使用jquery获取子div的visibility的值时,在不同版本的IE浏览器得到的值不一样: 在>=IE8时 $("#cdiv").css("visibility")的值为"hidd

JQuery -&gt; 超级简单的下拉菜单

1. create a new accout, create orginazation, create repo 2. install git in your local pc Note: you can create ssh key to avoid username/password input for github operation https://help.github.com/articles/generating-ssh-keys https://help.github.com/a

jQuery中动画animate(下)

jQuery中动画animate(下) animate在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过animate提供的第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知 .animate( properties, options ) options参数 duration - 设置动画执行的时间 easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数 step:规定每个动画的每一步完成之后要执行的函数 prog

jQuery自定义漂亮的下拉框插件8种效果演示

原始的下拉框不好看这里推荐一个jQuery自定义漂亮的下拉框插件8种效果演示 在线预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 <!DOCTYPE html> <html lang="en" class=

jQuery cxSelect 多级联动下拉菜单

随着电商热门,这种多层次的互动更充分地体现在下拉菜单,最明显的是多级联动地址下拉选择,因此,这里是一个简单的分享 jQuery cxSelect 多级联动下拉菜单 cxSelect 它是基于 jQuery 多级联动菜单插件.它适用于各省.动菜单. 列表数据通过 AJAX 获取(须要在server环境执行),也能够使用变量自己定义,数据内容使用 JSON 格式. 提供国内省市县数据(数据来源:basecss/cityData Date: 2014.03.31) 个人一直都有习惯,当有新知识点须要学