vue實現錨點跳轉及滾動監聽的方法
vue中實現錨點跳轉以及滾動監聽跳轉到相應標簽的方法,供大傢參考,具體內容如下
*註意·如果scroll-item的最後一個元素高度必須大於等於滾動區域的高度,不然最後一個元素就滾動不上去,
scrollIntoView接口的具體參數說明
實際效果圖
代碼結構
// Html結構 <template> <div> <div class="list"> <ul> <li v-for="(item,index) in title_list" :key="index"> <span ref="spans" :style="{color: activeStep === index ? '#1987e1' : '#000000'}" @click="jump(index)"> {{item.title}} </span> </li> </ul> </div> <div class="result" @scroll="onScroll" > <div class="scroll-item"><span>第一</span></div> <div class="scroll-item"><span>第二</span></div> <div class="scroll-item"><span>第三</span></div> <div class="scroll-item"><span>第四</span></div> </div> </div> </template>
//功能實現代碼 <script> export default { methods:{ jump(index) { var items = document.querySelectorAll(".scroll-item"); for (var i = 0; i < items.length; i++) { if (index === i) { items[i].scrollIntoView({ block: "start",//默認跳轉到頂部 behavior: "smooth"//滾動的速度 }); } } }, onScroll(e) { let scrollItems = document.querySelectorAll(".scroll-item"); for (let i = scrollItems.length - 1; i >= 0; i--) { // 判斷滾動條滾動距離是否大於當前滾動項可滾動距離 let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop; if (judge) { this.activeStep = i; break; } } }, }, data() { return { activeStep :0, title_list:[ {title:'第一'}, {title:'第二'}, {title:'第三'}, {title:'第四'}, ] } } } </script>
//樣式 <style> .list { width: 100%; height: 40px; margin-bottom: 20px; background: pink; } ul { width: 100%; height: 40px; line-height: 40px; list-style: none; } li { float: left; width: 20%; font-size: 30px; } li>span { cursor:pointer; } .result { width: 100%; height: 500px; overflow: scroll; } .scroll-item { width: 100%; height: 500px; margin-top:20px; background: yellow; } .scroll-item>span { font-size: 40px; } .scroll-item:first-child { margin-top: 0; } .scroll-item:last-child { height: 500px; }/ * 最後一個元素的最小高度要大於等於父元素的高度,如果scroll-item為高度自適應的話,那麼最後一個scroll-item就得設置min-height:100%* / </style>
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。