JS实现快速的导航下拉菜单动画效果附源码下载


Posted in Javascript onNovember 01, 2016

这是一个带变形动画特效的下拉导航菜单特效。该导航菜单在菜单项之间切换时,下拉菜单会快速的根据菜单内容的大小来动态变形,显示合适的下拉菜单大小,效果非常棒。

JS实现快速的导航下拉菜单动画效果附源码下载

查看演示     下载源码

HTML

该导航菜单的HTML结构如下:

<header class="cd-morph-dropdown"> 
<a href="#0" class="nav-trigger">Open Nav<span aria-hidden="true"></span></a> 
<nav class="main-nav"> 
<ul> 
<li class="has-dropdown gallery" data-content="about"> 
<a href="#0">About</a> 
</li> 
<li class="has-dropdown links" data-content="pricing"> 
<a href="#0">Pricing</a> 
</li> 
<li class="has-dropdown button" data-content="contact"> 
<a href="#0">Contact</a> 
</li> 
</ul> 
</nav> 
<div class="morph-dropdown-wrapper"> 
<div class="dropdown-list"> 
<ul> 
<li id="about" class="dropdown gallery"> 
<!-- dropdown content here --> 
</li> 
<li id="pricing" class="dropdown links"> 
<!-- dropdown content here --> 
</li> 
<li id="contact" class="dropdown button"> 
<!-- dropdown content here --> 
</li> 
</ul> 
<div class="bg-layer" aria-hidden="true"></div> 
</div> <!-- dropdown-list --> 
</div> <!-- morph-dropdown-wrapper --> 
</header>

CSS样式请参照源码中的css/style.css文件。

Javascript

为了实现这个导航菜单,特效中创建了一个morphDropdown对象。并使用bindEvents ()方法来处理元素的事件。

function morphDropdown( element ) { 
this.element = element; 
this.mainNavigation = this.element.find('.main-nav'); 
this.mainNavigationItems = this.mainNavigation.find('.has-dropdown'); 
this.dropdownList = this.element.find('.dropdown-list'); 
//... 
this.bindEvents(); 
}
bindEvents()方法用于在.has-dropdown和.dropdown元素上检测鼠标进入和鼠标离开事件。
morphDropdown.prototype.bindEvents = function() { 
var self = this; 
this.mainNavigationItems.mouseenter(function(event){ 
//hover over one of the nav items -> show dropdown 
self.showDropdown($(this)); 
}).mouseleave(function(){ 
//if not hovering over a nav item or a dropdown -> hide dropdown 
if( self.mainNavigation.find('.has-dropdown:hover').length == 0 && self.element.find('.dropdown-list:hover').length == 0 ) self.hideDropdown(); 
}); 
//... 
}; 
showDropdown方法用于处理宽度、高度和.dropdown-list元素的translateX值,以及放大和缩小.bg-layer元素。
morphDropdown.prototype.showDropdown = function(item) { 
var selectedDropdown = this.dropdownList.find('#'+item.data('content')), 
selectedDropdownHeight = selectedDropdown.innerHeight(), 
selectedDropdownWidth = selectedDropdown.children('.content').innerWidth(), 
selectedDropdownLeft = item.offset().left + item.innerWidth()/2 - selectedDropdownWidth/2; 
//update dropdown and dropdown background position and size 
this.updateDropdown(selectedDropdown, parseInt(selectedDropdownHeight), selectedDropdownWidth, parseInt(selectedDropdownLeft)); 
//add the .active class to the selected .dropdown and .is-dropdown-visible to the .cd-morph-dropdown 
//... 
}; 
morphDropdown.prototype.updateDropdown = function(dropdownItem, height, width, left) { 
this.dropdownList.css({ 
'-moz-transform': 'translateX(' + left + 'px)', 
'-webkit-transform': 'translateX(' + left + 'px)', 
'-ms-transform': 'translateX(' + left + 'px)', 
'-o-transform': 'translateX(' + left + 'px)', 
'transform': 'translateX(' + left + 'px)', 
'width': width+'px', 
'height': height+'px' 
}); 
this.dropdownBg.css({ 
'-moz-transform': 'scaleX(' + width + ') scaleY(' + height + ')', 
'-webkit-transform': 'scaleX(' + width + ') scaleY(' + height + ')', 
'-ms-transform': 'scaleX(' + width + ') scaleY(' + height + ')', 
'-o-transform': 'scaleX(' + width + ') scaleY(' + height + ')', 
'transform': 'scaleX(' + width + ') scaleY(' + height + ')' 
}); 
};

以上所述是小编给大家介绍的JS实现快速的导航下拉菜单动画效果附源码下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
JQuery1.6 使用方法三
Nov 23 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
JS解析XML实例分析
Jan 30 Javascript
js中javascript:void(0) 真正含义
Nov 05 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
jquery实现轮播图效果
Feb 13 Javascript
js拖动滑块和点击水波纹效果实例代码
Oct 16 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 08 Javascript
vue+openlayers绘制省市边界线
Dec 24 Vue.js
AngularJS入门教程之数据绑定用法示例
Nov 01 #Javascript
jQuery动态生成Bootstrap表格
Nov 01 #Javascript
AngularJs入门教程之环境搭建+创建应用示例
Nov 01 #Javascript
jQuery双向列表选择器select版
Nov 01 #Javascript
jQuery双向列表选择器DIV模拟版
Nov 01 #Javascript
JS button按钮实现submit按钮提交效果
Nov 01 #Javascript
Javascript 动态改变imput type属性
Nov 01 #Javascript
You might like
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
pandas string转dataframe的方法
2018/04/11 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
使用Python实现分别输出每个数组
2019/12/06 Python
Python正则表达式如何匹配中文
2020/05/27 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
全球度假村:Club Med
2017/11/27 全球购物
小学生寒假家长评语
2014/04/16 职场文书
建筑施工安全责任书
2014/07/24 职场文书
社区护士演讲稿
2014/08/27 职场文书
个人整改措施书面材料
2014/10/24 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
python Tkinter模块使用方法详解
2022/04/07 Python