先看一下最終的運行效果。前端
項目背景介紹:
技術棧: vue+vux+nodejs
需求:對汽車品牌列表能夠按照字母進行索引定位
在開發中實現這種需求,心想還不是小菜一碟,做爲一個飽經bug的程序員,別的我就不吹了,最起碼Ctrl+C用的仍是蠻不錯的。
雖然個人複製能力MAX,但最起碼的功能點仍是要先梳理一下。
要實現這個功能統共分兩步,
第一根據點擊找到須要定位的位置,
第二觸發頁面滾動直接到這個位置。
so easy 嘛~
我以迅雷不接掩耳盜小鈴鐺之勢就從個人程序小倉庫裏Ctrl+C了一段代碼:
以下:vue
document.querySelector('#id'); // 獲取點擊節點找到節點對應的內容而後控制滾動 $(window).scrollTop($('#' + s + '1').offset().top); // 跳轉到的位置
由於項目中沒有用到jQuery,在用的時候要把$去掉。作了點小改動java
document.documentElement.scrollTop = document.querySelector('#id').offset().top);
大吉大利,萬無一失,程序跑起來。
貌似不行,翻遍全網只要是用scrollTop 都不行。
由於在vue中使用scrollTo不能賦值,老是0。
在解決程序疑難扎症這一點上,還真沒遇到過對手。說了這麼多到底怎麼作呢?
請自行看下面的總結。node
在試錯過程當中發現scrollIntoView()方法能夠實現定位顯示。程序員
具體怎麼實現的看下面的程序吧,總結一下有三點。
1.在須要定位到的dom中建立一個隱藏的dom
2.設置要定位的dom元素 position:relative 隱藏的dom position:absolute;
3.把點擊點定位到隱藏的dom便可微信
嗯,暫時先總結到這裏吧,下面有源碼可供參考。
完美~架構
methods: { jump(index){ document.getElementById("tchar_nav_"+index).scrollIntoView(); }, }, <!-- 字母導航 start --> <div class="fixed-nav" style="opacity: 1; display: block;"> <ul class="rows-box"> <li v-for="(item, index) in listAll" :key="index" :id="'char_'+index"> <a @click="jump(index)">{{index}}</a> </li> </ul> </div> <div class="alert" style="display: none;"><span>Y</span></div> <!-- 字母導航 end --> <div class="brand-list bybrand_list" v-for="(item, index) in listAll" :key="index"> <div :id="'tchar_nav_'+index" class="positionTo"></div> <div :id="'char_nav_'+index" class="tt-small phone-title" :data-key="index"> <span>{{index}}</span></div> <div class="box"> <ul> <li id="char_nav_audi" v-for="(item2, index2) in item" :key="index2"> </li> </ul> </div> </div> <style lang="less" scoped> .brand-list{ position: relative; } .positionTo{ position: absolute; height: 30px; background: transparent; width: 30px; background: red; z-index: 99; top:-46px; } </sytle>
我是李古拉雷,四年java開發,四年前端加產品,現任職今日頭條前端架構師,終身學習者。聽說熱愛開發,熱愛分享且顏值高的小夥伴人都關注了這個微信公衆號【李古拉雷】less