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 相关文章推荐
JavaScript DOM 学习第五章 表单简介
Feb 19 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
动态加载js文件简单示例
Apr 21 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
Jan 23 jQuery
mpvue小程序仿qq左滑置顶删除组件
Aug 03 Javascript
详解JavaScript 的变量
Mar 08 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 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学习教程之第2天
2008/06/15 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
yii用户注册表单验证实例
2015/12/26 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
javascript实现计算器功能
2020/03/30 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Python3实现飞机大战游戏
2020/04/24 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
学前教育专业毕业生自荐信
2013/10/03 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
公司应聘求职信
2014/06/21 职场文书
工作经历证明书范文
2014/11/02 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
同学会演讲稿
2019/04/02 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL