側欄導航自動定位效果詳解
分享一段程式碼例項,它實現了側欄定位導航效果。
點選側欄導航可以實現頁面位置定位功能,當拖動滾動條的時候,側欄也能夠自定實現定位效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> html, body, div, ul, li { margin: 0; padding: 0; } ul li { list-style: none; } #sideBar { width: 50px; height: 500px; position: fixed; left: 200px; top: 200px; } #sideBar ul li { width: 50px; height: 50px; background: skyblue; border: 1px dashed #eee; color: #fff; text-align: center; line-height: 50px; cursor: pointer; } #sideBar ul li.cur { background: orange; color: #37c1e3; font-weight: bold; } .item { width: 70%; height: 800px; background: #cccccc; margin: 0 auto; font-size: 150px; color: #fff; text-align: center; border-bottom: 1px solid #37c1e3; line-height: 800px; } </style> <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script> $(function() { function SideBar(opt) { var self = this; this.opt = { sidebar: '', items: '' }; this.opt = opt; this.click_F = false; this.proboxTop = []; this.opt.sidebar.find('li').eq(0).addClass('cur'); $.each(self.opt.items, function(index) { self.proboxTop[index] = self.opt.items.eq(index).offset().top; }); this.init(); } SideBar.prototype = { init: function() { this.clickTo(); this.scrollTo(); }, clickTo: function() { var self = this; this.opt.sidebar.find('li').click(function() { self.click_F = true; var index = $(this).index(); $('html,body').finish().animate({ scrollTop: self.proboxTop[index] }, function() { self.click_F = false; }); $(this).addClass('cur').siblings().removeClass('cur'); }); }, scrollTo: function() { var self = this; this.change($(window).scrollTop()); $(window).on('scroll', function() { if (self.click_F) { return; } self.change($(this).scrollTop()); }); }, change: function(scrollTop) { var self = this; var el = self.opt.sidebar; for (var index = 0; index < self.proboxTop.length - 1; index++) { if (self.proboxTop[index] <= scrollTop && self.proboxTop[index + 1] > scrollTop) { el.find('li').eq(index).addClass('cur').siblings().removeClass('cur'); } } if (self.proboxTop[self.proboxTop.length - 1] <= scrollTop) { el.find('li').eq(self.proboxTop.length - 1).addClass('cur').siblings().removeClass('cur'); } } } var scroll = new SideBar({ sidebar: $('#sideBar'), items: $('.item') }); }); </script> </head> <body> <div id="sideBar"> <ul> <li>one</li> <li>two</li> <li>three</li> <li>four</li> <li>fiv</li> </ul> </div> <div class="content"> <div style="background:pink" class="item">螞蟻部落一</div> <div style="background:deepskyblue" class="item">螞蟻部落二</div> <div style="background:greenyellow" class="item">螞蟻部落三</div> <div style="background:green" class="item">螞蟻部落四</div> <div style="background:orange" class="item">螞蟻部落五</div> </div> <div style="height:1000px;"></div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).$(function() {}),當文件結構完全載入完畢再去執行函式中的程式碼。
(2).function SideBar(opt) {},用作建構函式,引數是相關的配置引數,後面會介紹。
(3).var self = this,防止this衝突,因為在不同的上下文中this指向是不同的。
(4).this.opt = {
sidebar: '',
items: ''
},預設配置引數,sidebar是側欄導航元素;items是右側滑動的塊。
(5).this.opt = opt,重置配置引數。
(6).this.click_F = false,用來標識滾動條滾動是否對導航起作用,防止點選左側導航和拖動滾動條衝突。
(7).this.proboxTop = [],用來儲存滑動塊距離文件頂部的距離。
(8).this.opt.sidebar.find('li').eq(0).addClass('cur'),將第一個側欄導航設定為黃色。
(9).$.each(self.opt.items, function(index) {
self.proboxTop[index] = self.opt.items.eq(index).offset().top;
}),將各個滑塊距離文件頂部的距離存入陣列。
(10).this.init(),進行初始化操作。
(11).SideBar.prototype = {},設定原型物件。
(12).init: function() {
this.clickTo();
this.scrollTo();
},此方法可以進行一些初始化操作。
(13).clickTo: function() {},此方法可以為側欄導航註冊click事件處理函式。
(14).var self = this,防止this衝突,因為在不同的上下文中this指向是不同的;這裡的this是指向SideBar物件例項。
(15).var index = $(this).index(),獲取當前點選側欄導航的索引。
(16).$('html,body').finish().animate({
scrollTop: self.proboxTop[index]
}, function() {
self.click_F = false;
}),點選側欄導航,那麼就滑動到對應的塊;
然後就將click_F設定為false。
(17).$(this).addClass('cur').siblings().removeClass('cur'),將當前側欄導航設定為黃色。
(18).scrollTo: function() {},此方法主要實現了註冊scroll事件處理函式。
(19).this.change($(window).scrollTop()),實現側欄導航定位效果。
(20).$(window).on('scroll', function() {}),註冊scroll事件處理函式。
(21).if (self.click_F) {
return;
},如果為true,說明已經點選了側欄導航,並且滾動動畫還沒完成,那麼就直接跳出;目的是防止點選側欄導航和滾動滾動條衝突。
(22).self.change($(this).scrollTop()),實現側欄導航定位效果,也就是設定哪個側欄導航為黃色。
二.相關閱讀:
(1).find()可以參閱jQuery find()一章節。
(2).eq()可以參閱jQuery eq()一章節。
(3).addClass()可以參閱jQuery addClass()一章節。
(4).$.each()可以參閱jQuery.each()一章節。
(5).offset()可以參閱jQuery offset()一章節。
(6).prototype可以參閱javascript prototype原型一章節。
(7).index()可以參閱jQuery index()一章節。
(8).finish()可以參閱jQuery finish()一章節。
(9).animate()可以參閱jQuery animate()一章節。
(10).siblings()可以參閱jQuery siblings()一章節。
(11).removeClass()可以參閱jQuery removeClass()一章節。
(12).scrollTop()可以參閱jQuery scrollTop()一章節。
相關文章
- 商城側欄導航效果實現詳解
- 拖動滾動條實現側欄導航定位效果
- 側欄懸浮導航選單拖動滾動條可以自動定位效果
- Ubuntu 20.04 自動隱藏左側導航欄Ubuntu
- 側欄能夠定位的導航選單程式碼例項
- jQuery導航頁面定位詳解jQuery
- JavaScript滑鼠懸浮展開側欄導航JavaScript
- js垂直右側展開導航選單詳解JS
- 購物網站側欄商品分類導航網站
- Bootstrap 4 實現導航欄右側對齊boot
- jQuery側邊欄隱藏和顯示導航jQuery
- JavaScript側欄緩動分享選單詳解JavaScript
- css橫向導航欄製作流程詳解CSS
- Android官方導航欄ActionBar使用詳解Android
- 僅2步實現 拜拜 漢堡導航欄效果~ 全新底部導航互動(滑動隱藏)
- 構建動態互動式H5導航欄:滑動高亮、吸頂和錨點導航技巧詳解H5
- 谷歌最新定位導航 將實現全自動駕駛?谷歌自動駕駛
- 一側具有滑鼠跟隨效果的垂直導航選單
- 彈性效果網頁右側浮動框詳解網頁
- 實現左側導航和橫向導航
- 【前端】javascript實現導航欄筋斗雲效果特效前端JavaScript特效
- ElementUI側邊欄導航選單隱藏顯示問題UI
- CSS實現的側欄三級導航選單程式碼CSS
- Win10 隱藏左側邊側欄(導航視窗)中的資料夾Win10
- 線上直播原始碼,JS動態效果之,側邊欄滾動固定效果原始碼JS
- 小程式 自動導航
- Flutter 底部導航詳解Flutter
- JavaScript自動更新時間效果詳解JavaScript
- weex沉浸式導航欄解決方案
- 實現隨著滾動條滾動,導航會自動切換的效果
- WordPresscategory導航欄Go
- tpextbuilder- 左側樹形導航UI
- 左側分類導航選單
- 高度塌陷 解決高度塌陷 導航條 清除浮動 相對定位
- 網頁導航欄滑鼠移上去自動彈出下拉選單網頁
- 解決win10左側導航欄出現兩個隨身碟圖示的方法Win10
- Win10電腦滑鼠無法開啟螢幕側邊欄導航的解決方法Win10
- 滾動cell 顯示隱藏導航欄