vue+vux scrollTop無法實現定位到具體dom可以試試scrollIntoView() ...
先看一下最終的運行效果。
項目背景介紹:
技術棧: vue+vux+nodejs
需求:對汽車品牌列表可以按照字母進行索引定位
在開發中實現這種需求,心想還不是小菜一碟,作為一個飽經bug的程式員,別的我就不吹了,最起碼Ctrl+C用的還是蠻不錯的。
雖然我的複製能力MAX,但最起碼的功能點還是要先梳理一下。
要實現這個功能統共分兩步,
第一根據點擊找到需要定位的位置,
第二觸發頁面滾動直接到這個位置。
so easy 嘛~
我以迅雷不接掩耳盜小鈴鐺之勢就從我的程式小倉庫里Ctrl+C了一段代碼:
如下:
document.querySelector('#id'); // 獲取點擊節點找到節點對應的內容然後控制滾動
$(window).scrollTop($('#' + s + '1').offset().top); // 跳轉到的位置
因為項目中沒有用到jQuery,在用的時候要把$去掉。做了點小改動
document.documentElement.scrollTop = document.querySelector('#id').offset().top);
大吉大利,萬無一失,程式跑起來。
貌似不行,翻遍全網只要是用scrollTop 都不行。
因為在vue中使用scrollTo不能賦值,總是0。
在解決程式疑難扎症這一點上,還真沒遇到過對手。說了這麼多到底怎麼做呢?
請自行看下麵的總結。
在試錯過程中發現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; } </style>