左側導航click,右側內容scroll——一個模擬外賣點單的簡易頁面
本人很少做移動端的東西,這是一個小夥伴發過來的案例。功能很明確,就是點選左側選單,右側內容對應滾動指定;右側內容滾動,左側選單對應高亮。
一、 問題描述
這個demo有兩處問題:
1. 點選切換左側選單時,由於右側內容滾動也觸發了scroll
事件,導致互相影響;
2. 由於滾動高度的限制,點選左側6/7/8選單時,右側對應的內容不會置頂
(當然,這個特徵在目前各大外賣平臺的產品設計就是不讓置頂,但此處設計就是想點誰誰up)。
二、問題分析與解決
1.事件衝突問題
這個問題我們可以考慮,在左側選單點選觸發動畫前,禁用右側滾動事件,等動畫結束後再啟動右側滾動事件。具體實現,可以通過一個標誌來設定。
如下程式碼,新增3行:
// 左側選單點選事件
$(".menu-left").on('click','li',function(){
$(".menu-right").attr("noscroll",true); // add line1 禁止右側滾動
$(this).addClass('on');
$(this).siblings('li').removeClass('on');
$(".menu-right").animate({scrollTop:$(this).attr('scroll')},200,function(){
$(".menu-right").attr("noscroll",false); // add line2 啟動右側滾動
});
});
// 右側分類滾動事件
$(".menu-right").scroll(function(){
if ($(this).attr("noscroll") == "true") return false; // add line3 根據標誌判斷是否執行滾動事件程式碼
var scrTop=$(this).scrollTop();
var index;
...
});
2. 滾動高度不夠問題
既然高度不夠,我們就補上這個高度。這個問題的難點是要補多少的高度。
我們看下,想要最後一個分類能置頂,則需要再後面在追加如下圖的空白。那這個空白的高度是多少呢?
其實就等於(頁面高度 - 最後一個分類的高度)。
所以我們可以考慮,對右側分類的<ul id="listUl">
標籤的外圍增加一個<div class="menu-right">
來做over-flow:auto
的設定,而<u id="listUl"l>
則通過javaScript來設定合適的滾動高度。具體計算公式是:合適的滾動高度 = 原本的滾動高度 + 頁面高度 - 最後一個分類的高度
// 設定右側分類合適的滾動高度
$("#listUl").css("height",$(".menu-right").get(0).scrollHeight + $(".menu-right").get(0).offsetHeight - $("#listUl li:last-child").outerHeight());
console.log("整個滾動高度:" + $(".menu-right").get(0).scrollHeight);
console.log("頁面高度(螢幕高度):" + $(".menu-right").get(0).offsetHeight);
console.log("最後一個分類高度(包含padding):" + $("#listUl li:last-child").height());
三、小結
這個案例很簡單,遇到問題也是小問題,但處理思路還不錯,還是mark下。
最後的程式碼效果如下:
相關文章
- C# 簡單反射實現winform左側樹形導航,右側切換內容C#反射ORM
- adminLTE 點選左側選單導航連結跳轉整個頁面會重新整理,左側的選單又會摺疊起來,如何不擇疊?
- tpextbuilder- 左側樹形導航UI
- 左側導航欄element -2024/11/27
- OT部分頁面左側選單不顯示
- jQuery寫的文章內容頁右側浮動滾動jQuery
- [提問交流]切換頁面,左側選單消失
- Ubuntu 20.04 自動隱藏左側導航欄Ubuntu
- HTML側邊部分內容滑動跟隨 左側跟隨滾動模組程式碼HTML
- 來,搞個側欄導航
- Win10 隱藏左側邊側欄(導航視窗)中的資料夾Win10
- Bootstrap 4 實現導航欄右側對齊boot
- 用jquery外掛寫一個小米官網左側二級選單jQuery
- 填充每個節點的下一個右側節點指標指標
- 兩欄佈局,左側可伸縮,右側寬度自適應
- 左側固定,右側自適應的佈局方式理解margin負值理論
- 填充每個節點的下一個右側節點指標 II指標
- 左側固定,右側自適應的佈局方式(新增評論區大佬教的方法)
- 116. 填充每個節點的下一個右側節點指標指標
- 實現左側固定寬度, 右側自適應的兩欄佈局常見方法
- LeetCode-116-填充每個節點的下一個右側節點指標LeetCode指標
- LeetCode-117-填充每個節點的下一個右側節點指標 IILeetCode指標
- LeetCode117-填充每個節點的下一個右側節點指標 IILeetCode指標
- [BUG反饋]為什麼左側選單欄和導航欄無緣無故消失了
- 如何隱藏百度首頁右側的 實時熱點?
- vue 甘特圖(三):甘特圖右側內容拖動展示Vue
- IDEA 右側的maven框消失IdeaMaven
- ElementUI側邊欄導航選單隱藏顯示問題UI
- 電商左側商品分類選單實現
- JavaScript滑鼠懸浮展開側欄導航JavaScript
- 左邊分類和右邊導航的關係
- Pycharm-Pycharm設定左側導航欄字型大小和程式碼編輯區字型大小PyCharm
- Dynamics 365 控制右側欄的介面
- 彈性效果網頁右側浮動框詳解網頁
- vue 動態載入路由,渲染左側選單欄Vue路由
- 購物網站側欄商品分類導航網站
- Panel 新增右側操作圖示
- jQuery簡單實用的響應式固定側邊欄外掛jQuery