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 相关文章推荐
Jquery作者John Resig自己封装的javascript 常用函数
Nov 09 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
Jan 20 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
Aug 10 Javascript
JavaScript生成的动态下雨背景效果实现方法
Feb 25 Javascript
Javascript实现跑马灯效果的简单实例
May 31 Javascript
js简单获取表单中单选按钮值的方法
Aug 23 Javascript
关于AngularJs数据的本地存储详解
Jan 20 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
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
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jQuery链使用指南
2015/01/20 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
Python字符串处理函数简明总结
2015/04/13 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
Django models filter筛选条件详解
2020/03/16 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
医院护士的求职信范文
2013/12/26 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
个人党性剖析材料
2014/02/03 职场文书
大学毕业感言50字
2014/02/07 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
群众路线领导对照材料
2014/08/23 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
python多次执行绘制条形图
2022/04/20 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android