jQuery实现仿京东防抖动菜单效果示例


Posted in jQuery onJuly 06, 2018

本文实例讲述了jQuery实现仿京东防抖动菜单效果。分享给大家供大家参考,具体如下:

完整代码:

<!DOCTYPE html>
<html>
<head>
<title>3water.com jQuery仿京东菜单</title>
<meta charset="utf-8">
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style type="text/css">
*{
  padding: 0;
  margin: 0;
}
li{
  list-style: none;
}
a{
  color:#555;
}
.menu{
  width: 220px;
  border: 2px solid #333;
  position: relative;
}
.menu_item{
  height: 47px;
  padding-left:20px;
  line-height: 47px;
  background-color:#feebf3;
  border-bottom: 1px solid #f0bfd3;
}
.menu_item.current{
  background-color: #fff;
}
.menu_cont{
  position: absolute;
  width: 500px;
  height: 150px;
  top: 0;
  left: 220px;
  padding: 15px;
  border: 1px solid #666;
}
</style>
</head>
<body>
<h2>防抖动</h2>
<div class="menu">
  <ul class="menu_list">
    <li class="menu_item"><a href="">热点要闻</a></li>
    <li class="menu_item"><a href="">个性推荐</a></li>
    <li class="menu_item"><a href="">北京新闻</a></li>
    <li class="menu_item"><a href="">环球视野</a></li>
  </ul>
  <div class="menu_cont" style="display:none">
    <div class="menu_cont_list">
      <ul>
        <li>
          <h3><a href="">618,刘强东笑了,很多人哭了</a></h3>
        </li>
        <li>
          <h3><a href="">普通人如何分享人民币增值红利</a></h3>
        </li>
        <li>
          <h3><a href="">大都市里藏板房小学闷热无比 </a></h3>
        </li>
      </ul>
    </div>
    <div class="menu_cont_list">
      <ul>
        <li>
          <h3><a href="">中国炼油产能过剩超亿吨 油价迫近4元降回到十年前</a></h3>
        </li>
        <li>
          <h3><a href="">银行大幅上调首套房贷利率 这些人最受影响</a></h3>
        </li>
        <li>
          <h3><a href="">江南大范围强降雨再次来袭 今明北方旱区多雷阵雨</a></h3>
        </li>
      </ul>
    </div>
    <div class="menu_cont_list">
      <ul>
        <li>
          <h3><a href="">京郊特产组团进超市 类似活动将在全市推开</a></h3>
        </li>
        <li>
          <h3><a href="">北京某高档小区地下二层防空洞改群租房</a></h3>
        </li>
        <li>
          <h3><a href="">北京市民踊跃收听收看市党代会开幕直播</a></h3>
        </li>
      </ul>
    </div>
    <div class="menu_cont_list">
      <ul>
        <li>
          <h3><a href="">英国推出“钱味香水”:随时感受钞票味儿</a></h3>
        </li>
        <li>
          <h3><a href="">美国是如何买下阿拉斯加的?为何俄国悔不当初?</a></h3>
        </li>
        <li>
          <h3><a href="">将增近4000人,美国为何欲大幅增兵阿富汗?</a></h3>
        </li>
      </ul>
    </div>
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){
  var $menu = $(".menu");
  var $menuItem = $(".menu_item");
  var $menuCont = $(".menu_cont");
  var $menuContList= $(".menu_cont_list")
  var menuTimer;
  $menuItem.on("mouseenter", function(){
    var self = $(this);
    menuTimer = setTimeout(function(){
      self.addClass("current");
      self.siblings().removeClass("current");
      $menuCont.show();
      var _index = self.index();
      $menuContList.eq(_index).show();
      $menuContList.eq(_index).siblings().hide();
    },500)
  }).on("mouseleave", function(){
    if(menuTimer){
      clearTimeout(menuTimer);
    }
  })
  $menu.on("mouseleave", function(){
    $menuCont.hide();
  })
})
</script>
</body>
</html>

使用本站HTML/CSS/JS在线运行测试工具:http://tools.3water.com/code/HtmlJsRun,可得到如下测试运行效果:

jQuery实现仿京东防抖动菜单效果示例

问题:鼠标第一次移入的时候是不需要延迟的,所以加入了mouseFlag

优化后的JS为

$(function(){
  var _catTimer;
  var _mouseflag;
  var $menu = $("#menu");
  var $menuItem = $menu.find(".menu_list").children("li");//菜单
  var $menuCont = $menu.find(".menu_cont");//容器
  var $menuContItem = $menuCont.children("div");//
  $menuCont.hide();//默认隐藏容器窗口
  $menuItem.on("mouseenter", function(){
    var self = $(this);
    if(!_mouseflag){
      showCont(self);
      _mouseflag = true;
    }else{
      _catTimer = setTimeout(function(){
        showCont(self)
      },300)
    }
  }).on("mouseleave", function(){
    if(_catTimer){
      clearTimeout(_catTimer);
    }
  })
  $menu.on("mouseleave",function(){
    $menuCont.hide();
    $menuItem.removeClass("current");
  })
  var showCont = function (self) {
    self.addClass("current");
    self.siblings().removeClass("current");
    $menuCont.show();//显示容器窗口
    var _index = self.index();//获取位置
    $menuContItem.eq(_index).show();
    $menuContItem.eq(_index).siblings().hide();
  }
})

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 jQuery
jquery 键盘事件的使用方法详解
Sep 13 jQuery
jquery实现左右轮播切换效果
Jan 01 jQuery
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
AJAX在JQuery中的应用详解
Jan 30 jQuery
JQuery属性操作与循环用法示例
May 15 jQuery
jQuery实现简单评论功能
Aug 19 jQuery
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 #jQuery
jQuery实现炫丽的3d旋转星空效果
Jul 04 #jQuery
jQuery实现table表格checkbox全选的方法分析
Jul 04 #jQuery
jQuery实现表单动态添加与删除数据操作示例
Jul 03 #jQuery
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 #jQuery
jQuery阻止事件冒泡实例分析
Jul 03 #jQuery
jQuery实现模糊搜索功能的方法分析
Jun 29 #jQuery
You might like
PHP静态文件生成类实例
2014/11/29 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
什么时候需要进行强制类型转换
2016/09/03 面试题
毕业生物理教师求职信
2013/10/17 职场文书
回门宴父母答谢词
2014/01/26 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
学生会招新宣传语
2015/07/13 职场文书
总经理聘用协议书
2015/09/21 职场文书
2016年教代会开幕词
2016/03/04 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL