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获取input标签的输入值实现代码
Aug 05 Javascript
js中top的作用深入剖析
Mar 04 Javascript
javascript中的取反再取反~~没有意义
Apr 06 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
Aug 31 Javascript
解决vue 更改计算属性后select选中值不更改的问题
Mar 02 Javascript
详解在Javascript中进行面向切面编程
Apr 28 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
虫族 ZERG 概述
2020/03/14 星际争霸
用Flash图形化数据(一)
2006/10/09 PHP
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
php过滤危险html代码
2008/08/18 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
python 设置文件编码格式的实现方法
2017/12/21 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python3 字符串知识点学习笔记
2020/02/08 Python
python3中for循环踩过的坑记录
2020/12/14 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
幼儿园大班毕业教师寄语
2014/04/03 职场文书
遗嘱继承公证书
2014/04/09 职场文书
拓展训练激励口号
2014/06/17 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis