摘要:不過要是一個簡單的小項目,沒那么多要求的話,純還是能很好的適用的,性能上絕對要比通過滾動監聽強上好多倍,而且引用方便,只要數據生成了就可以直接使用
我們經常在手機上看到通訊錄列表,這類布局一般有兩個顯著的效果
首字母吸頂
快速定位
下面我們來實現一下
頁面結構這里頁面結構很簡單,就是兩個列表
然后加點樣式
html,body{ margin: 0; height: 100%; padding: 0; } dl,dd{ margin: 0; } .con{ position: relative; height: 100%; overflow-x: hidden; } .index{ position: absolute; right: 0; top: 0; bottom: 0; display: flex; flex-direction: column; justify-content: center; } .index a{ display: block; width: 30px; height: 30px; text-align: center; line-height: 30px; border-radius: 50%; background: cornflowerblue; text-decoration: none; color: #fff; outline: 0; margin: 5px; } .contacts{ height: 100%; background: #fff; overflow: auto; line-height: 2em; } .contacts dt{ background: bisque; font-size: 1.5rem; color:cornflowerblue; height: 2em; line-height: 2em; padding: 0 10px; } .contacts dd{ padding: 0 10px; display: block; cursor: pointer; }
這樣就可以看到布局了
https://codepen.io/xboxyan/pe...
實現吸頂效果吸頂效果其實很簡單,只要用到css中的新屬性position:sticky就可以了
粘性定位元素(stickily positioned element)是計算后位置屬性為 sticky 的元素。
兼容性還不錯,至少在移動端可以放心使用
給.contacts dt加上position:sticky
.contacts dt{ /*添加如下屬性*/ position: sticky; top: 0; }
這樣就實現了每個類目吸頂效果
https://codepen.io/xboxyan/pe...
實現快速定位效果如果不用js,那么可采用href錨點的方式來實現定位
具體做法就是
... ...
如果整個頁面是可以滾動的,那么只要點擊a,那么頁面就會迅速跳轉到id=A的元素上
現在對我們的頁面添加一些herf和id
https://codepen.io/xboxyan/pe...
點擊右側的導航按鈕,頁面就可以快速定位了
等等,好像還有些問題,當往回跳轉時,發現并沒有完全展開,比如像調回A,結果雖然A標簽出來了,但是,A下面的列表卻沒有出來
這是什么問題呢?
經過多次的研究,發現是position:sticky搞的鬼!
當往上定位的時候,我們通過href定位過去,定位的依據是到該元素第一次可見的位置,此時雖然該元素空壓機了,但是下面的元素沒有展示出來,所以就造成了這樣的問題
發現問題就要解決問題
快速定位效果修復其實我們想要定位的還可以是A下面的第一個列表元素,但是又不能是該元素,因為如果是第一代元素,當跳轉的時候就會被上面的A標簽遮住。
所以我們在兩者之間再插入一個標簽,用于定位
如下,添加了
A
- a1
- a2
B
- b1
- b2
...
如果直接放在這里肯定會占空間,所以我們把他向上位移,然后設置不可見,使該元素剛好覆蓋在原標簽位置
如下
.contacts .stikcy-fix{ position: static; visibility: hidden; margin-top: -2em; }
https://codepen.io/xboxyan/pe...
現在看看,是不是完美跳轉了?
其他細節通常我們在選擇右側索引時,頁面中間會出現一個大寫的字母
這個如果用css實現也比較簡單,用到偽元素的content:attr()就可以了,在之前的文章(用純css實現打星星效果)中也講到過
具體實現如下
.index a:active:after{ content: attr(data-type); position: fixed; left: 50%; top: 50%; width: 100px; height: 100px; border-radius: 5px; text-align: center; line-height: 100px; font-size: 50px; transform: translate(-50%,-50%); background: rgba(0,0,0,.5); }
這里用到了content: attr(data-type),所以a上面要有一個data-type屬性
其次,實際項目中,我們需要用js來生成這些列表
假定我們要求的數據如下
var data = [ { "type":"A", "user":[ { name:"a1" }, { name:"a2" }, { name:"a3" }, { name:"a1" }, { name:"a2" }, { name:"a3" }, { name:"a3" }, { name:"a1" }, { name:"a2" }, { name:"a3" }, ] }, { "type":"B", "user":[ { name:"b1" }, { name:"b2" }, { name:"b3" }, { name:"b1" }, { name:"b2" }, { name:"b3" }, { name:"b3" }, { name:"b1" }, { name:"b2" }, { name:"b3" }, ] }, { "type":"C", "user":[ { name:"c1" }, { name:"c2" }, { name:"c3" }, { name:"c1" }, { name:"c2" }, { name:"c3" }, { name:"c3" }, { name:"c1" }, { name:"c2" }, { name:"c3" }, ] }, { "type":"D", "user":[ { name:"d1" }, { name:"d2" }, { name:"d3" }, { name:"d1" }, { name:"d2" }, { name:"d3" }, { name:"d3" }, { name:"d1" }, { name:"d2" }, { name:"d3" }, ] }, { "type":"E", "user":[ { name:"e1" }, { name:"e2" }, { name:"e3" }, { name:"e1" }, { name:"e2" }, { name:"e3" }, { name:"e3" }, { name:"e1" }, { name:"e2" }, { name:"e3" }, ] } ]
這種格式的數據可以要求后端返回,或者直接前端改造都行
然后對數據進行循環遍歷即可
var indexs = document.getElementById("index"); var contacts = document.getElementById("contacts"); var index_html = ""; var contacts_html = ""; data.forEach(el=>{ contacts_html += "
https://codepen.io/xboxyan/pe...
這部分js只是生成布局,沒有任何功能上的邏輯
一些不足雖然通過錨點實現列表的快速定位,但是此時瀏覽器的地址欄會加上#A這樣的標識,一不好看,二在使用瀏覽器默認的返回時會把這些標識全部走一遍,不太方便。
還有一個問題,在滾動列表的時候,沒法做到右側索引當前類別高亮顯示,同時右側索引也不支持滑動快速定位。
這些細節問題也只能通過js來修復了。
不過要是一個簡單的小項目,沒那么多要求的話,純css還是能很好的適用的,性能上絕對要比通過js滾動監聽強上好多倍,而且引用方便,只要數據生成了就可以直接使用^^
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/53080.html
摘要:不過要是一個簡單的小項目,沒那么多要求的話,純還是能很好的適用的,性能上絕對要比通過滾動監聽強上好多倍,而且引用方便,只要數據生成了就可以直接使用 我們經常在手機上看到通訊錄列表,這類布局一般有兩個顯著的效果 showImg(https://segmentfault.com/img/remote/1460000016709371?w=360&h=640); 首字母吸頂 快速定位 下...
摘要:不過要是一個簡單的小項目,沒那么多要求的話,純還是能很好的適用的,性能上絕對要比通過滾動監聽強上好多倍,而且引用方便,只要數據生成了就可以直接使用 我們經常在手機上看到通訊錄列表,這類布局一般有兩個顯著的效果 showImg(https://segmentfault.com/img/remote/1460000016709371?w=360&h=640); 首字母吸頂 快速定位 下...
摘要:云計算深入,驅動市場過去十年,云計算服務取得了長足的發展。之于云計算的重要性,相當于操作系統之于電腦。細分市場投融資活躍全球云計算服務模式中,雖然市場份額最小,但是增速卻是最快的。向進軍已是云計算產業投資者和創業者的新戰略方向。1. 互聯網應用風口快速迭代,為企業提供風口型解決方案的PaaS服務商重要性凸顯。2. PaaS領域資本熱度增高,Docker技術平臺和通訊云平臺是今年最熱的細分領域...
摘要:不允許再有其他文件,不允許再有單獨的文件。必須支持標準的四則運算。請在收到郵件的小時內獨立完成本測試,并回復本郵件。項目地址最終版的計算器,項目地址和預覽圖片在。并且使用單位來進行自動計算尺寸。 一道筆試題 之前偶然看到一個公司的筆試題,題目如下: 用HTML5、CSS3、JavaScript,做一個網頁,實現如下圖形式計算器 showImg(https://segmentfault....
閱讀 3568·2021-11-15 11:36
閱讀 1060·2021-11-11 16:55
閱讀 694·2021-10-20 13:47
閱讀 2993·2021-09-29 09:35
閱讀 3428·2021-09-08 10:45
閱讀 2553·2019-08-30 15:44
閱讀 848·2019-08-30 11:10
閱讀 1427·2019-08-29 13:43