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


Posted in Javascript onOctober 27, 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与C# Windows应用程序交互方法
Jun 29 Javascript
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
JavaScript解析URL参数示例代码
Aug 12 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
jQuery选择器源码解读(八):addCombinator函数
Mar 31 Javascript
简介AngularJS的HTML DOM支持情况
Jun 17 Javascript
javascript实现跨域的方法汇总
Jun 25 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
浅谈redux以及react-redux简单实现
Aug 28 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
node创建Vue项目步骤详解
Mar 06 Javascript
简单理解vue中el、template、replace元素
Oct 27 #Javascript
深入理解JavaScript定时机制
Oct 27 #Javascript
解析javascript图片懒加载与预加载的分析总结
Oct 27 #Javascript
js实现加载更多功能实例
Oct 27 #Javascript
Vue.js一个文件对应一个组件实践
Oct 27 #Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
Oct 27 #Javascript
node.js文件上传处理示例
Oct 27 #Javascript
You might like
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
使用python实现画AR模型时序图
2019/11/20 Python
巴西在线鞋店:Shoestock
2017/10/28 全球购物
C语言编程题
2015/03/09 面试题
水利公司纪检监察自我鉴定
2014/02/25 职场文书
晚会主持词开场白
2014/03/17 职场文书
就业协议书范本
2014/04/11 职场文书
见习报告格式要求
2014/11/04 职场文书
财务部岗位职责
2015/02/03 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP