基于JS快速實(shí)現(xiàn)導(dǎo)航下拉菜單動(dòng)畫(huà)效果附源碼下載
這是一個(gè)帶變形動(dòng)畫(huà)特效的下拉導(dǎo)航菜單特效。該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會(huì)快速的根據(jù)菜單內(nèi)容的大小來(lái)動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒。
快速的導(dǎo)航下拉菜單動(dòng)畫(huà)效果如下所示:
HTML
該導(dǎo)航菜單的HTML結(jié)構(gòu)如下:
<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樣式請(qǐng)參照源碼中的css/style.css文件。
Javascript
為了實(shí)現(xiàn)這個(gè)導(dǎo)航菜單,特效中創(chuàng)建了一個(gè)morphDropdown對(duì)象。并使用bindEvents ()方法來(lái)處理元素的事件。
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元素上檢測(cè)鼠標(biāo)進(jìn)入和鼠標(biāo)離開(kāi)事件。 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快速實(shí)現(xiàn)導(dǎo)航下拉菜單動(dòng)畫(huà)效果附源碼下載,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- js實(shí)現(xiàn)前端界面導(dǎo)航欄下拉列表
- JS中用三種方式實(shí)現(xiàn)導(dǎo)航菜單中的二級(jí)下拉菜單
- 原生JS實(shí)現(xiàn)導(dǎo)航下拉菜單效果
- JS+CSS實(shí)現(xiàn)簡(jiǎn)單的二級(jí)下拉導(dǎo)航菜單效果
- JS 實(shí)現(xiàn)導(dǎo)航菜單中的二級(jí)下拉菜單的幾種方式
- javascript仿京東導(dǎo)航左側(cè)分類導(dǎo)航下拉菜單效果
- js+div+css下拉導(dǎo)航菜單完整代碼分享
- javascript實(shí)現(xiàn)帶下拉子菜單的導(dǎo)航菜單效果
- 頂部緩沖下拉菜單導(dǎo)航特效的JS代碼
- JavaScript實(shí)現(xiàn)HTML導(dǎo)航欄下拉菜單
相關(guān)文章
JavaScript正則表達(dá)式驗(yàn)證登錄實(shí)例
這篇文章主要為大家詳細(xì)介紹了JavaScript正則表達(dá)式驗(yàn)證登錄實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03p5.js實(shí)現(xiàn)故宮橘貓賞秋圖動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了p5.js實(shí)現(xiàn)故宮橘貓賞秋圖動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10JS實(shí)現(xiàn)的隨機(jī)排序功能算法示例
這篇文章主要介紹了JS實(shí)現(xiàn)的隨機(jī)排序功能算法,結(jié)合具體實(shí)例形式分析了javascript常用的排序算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06Bootstrap彈出框(Popover)被擠壓的問(wèn)題小結(jié)
比較了下Bootstrap的popover和一些其它的開(kāi)源項(xiàng)目,覺(jué)得Bootstrap的還算不錯(cuò)。在使用過(guò)程中遇到了一系列問(wèn)題,下面小編給大家分享Bootstrap彈出框(Popover)被擠壓的問(wèn)題小結(jié),需要的朋友參考下吧2017-07-07詳解maxlength屬性在textarea里奇怪的表現(xiàn)
這篇文章主要介紹了maxlength屬性在textarea里奇怪的表現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-12-12JavaScript實(shí)現(xiàn)x秒后自動(dòng)跳轉(zhuǎn)到一個(gè)頁(yè)面
今天看視頻學(xué)習(xí)時(shí)學(xué)習(xí)了一種新技術(shù),即平時(shí)我們?cè)谝粋€(gè)頁(yè)面點(diǎn)擊“提交”或“確認(rèn)”會(huì)自動(dòng)跳轉(zhuǎn)到一個(gè)頁(yè)面,在網(wǎng)上搜了一下,關(guān)于這個(gè)技術(shù)處理有多種方法,有興趣的朋友可以參考下2013-01-01