uniapp根據導航欄的標題定位到相應錨點位置
效果如圖:
封裝元件程式碼:
anchor-view/index.vue
<template>
<view>
<view
:scrollTop="scrollTop"
:minScolltop="minScolltop"
:outermostView="outermostView"
:types="types"
class="anchor-view flex u-border-bottom"
>
<view
v-for="(item,i) in types"
class="flex-center wid-25 flex"
v-text="item.title"
:key="i"
:id="item.anchor"
:class="active === i? 'active':''"
@click="changeActive(i)"
></view>
</view>
</view>
</template>
<script>
/**
* @property {Number} minScolltop 你需要在滾動到多少時顯示這個介面
* @property {Number} scrollTop 當前頁面的滾動距離
* @property {String} outermostView 當前介面最外層的節點
* @property {Array} types 你的錨點陣列
*/
export default {
props: {
minScolltop: {
type: Number,
default: 0
},
scrollTop: {
type: Number,
default: 0
},
outermostView: {
type: String,
default: '.contain-view'
},
types: {
type: Array,
default() {
return []
}
}
},
data() {
return {
active: 0
}
},
methods: {
changeActive(val) {
this.active = val
const _this = this
for (let i = 0; i < _this.types.length; i++) {
if (i === val) {
uni
.createSelectorQuery()
.select(_this.types[i].anchor)
.boundingClientRect(data => {
// 目標位置節點 類或者 id
uni
.createSelectorQuery()
.select('.contain-view')
.boundingClientRect(res => {
// 最外層盒子節點類或者 id
uni.pageScrollTo({
duration: 0, // 過渡時間
scrollTop: data.top - res.top // 到達距離頂部的top值
})
})
.exec()
})
.exec()
break
}
}
}
}
}
</script>
<style lang="scss" scoped>
.anchor-view {
background-color: #FFFFFF;
z-index: 998;
}
.wid-25 {
color: #666666;
position: relative;
}
// .active:after {
// content: '';
// position: absolute;
// bottom: 2rpx;
// width: 50rpx;
// height: 6rpx;
// background-color: #186de1;
// right: 65%;
// margin-right: -50rpx;
// }
.active:after {
content: '';
width: 42rpx;
height: 0;
border-bottom: 2px solid #007aff;
position: absolute;
left: 50%;
bottom: 0;
// -webkit-transform: translateX(-50%);
transform: translateX(-50%);
// -webkit-transition: .3s;
transition: .3s;
}
.flex{
white-space: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling:touch;
}
.flex-center{
text-align: center;
padding: 20rpx 32rpx;
display: inline-block;
// z-index: 20000;
// background-color: pink;
}
</style>
頁面引用方法:
import anchorView from ‘@/components/anchor-view/index.vue’
<view class="nav-block">
<anchor-view
:scrollTop="scrollTop"
:minScolltop="minScolltop"
:outermostView="outermostView"
:types="types"
></anchor-view>
</view>
<view class="content-block self-collapse">
<!-- id對應types裡的anchor -->
<uni-collapse-item id="title" title="標題文字">
<view class="info">
手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果
</view>
</uni-collapse-item>
<uni-collapse-item id="title2" title="標題文字2">
<view class="info">
手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果手風琴效果
</view>
</uni-collapse-item>
<uni-collapse-item id="title3" title="標題文字3">
<view class="info">
手風琴效果手風琴效果手風琴效果
</view>
</uni-collapse-item>
</uni-collapse>
</view>
import anchorView from '@/components/anchor-view/index.vue'
data() {
return {
outermostView: '.contain-view',
minScolltop: 100, // 當滾動多少時,出現
scrollTop:180,
types: [
{
title: '標題',
anchor: '#title'
},
{
title: '標題文字2',
anchor: '#title2'
},
{
title: '標題文字3',
anchor: '#title3'
},
]
}
},
相關文章
- 根據IP定位地理位置
- 根據瀏覽器的滑動條 固定導航欄瀏覽器
- uniapp自定義導航欄APP
- uniapp更改導航欄按鈕文字APP
- jQuery根據滾動條位置載入相應的內容jQuery
- 直播軟體app開發,導航條根據位置移動實現定位、顏色過渡動畫效果APP動畫
- HTML 錨點定位HTML
- 頭部導航欄也是動態的,板塊裡面的內容根據頭部導航欄動態展現資料
- iOS導航欄標題錯亂的解決方法iOS
- iOS導航欄佈局相關iOS
- 構建動態互動式H5導航欄:滑動高亮、吸頂和錨點導航技巧詳解H5
- 側欄導航自動定位效果詳解
- js,javascript 根據 xpath 路勁定位節點JSJavaScript
- 微信小程式-錨點定位微信小程式
- css 錨點定位 -- scrollIntoViewCSSView
- 根據經緯度繪製座標點相對位置(分別用php和html5實現)PHPHTML
- 百度地圖:根據位置獲取座標地圖
- 點選可以平滑定位到網頁指定位置網頁
- uniapp---wap2app去掉系統自帶的導航欄APP
- uni-app動態修改頂部導航欄標題APP
- 基於鴻蒙ArkUI封裝標題欄TitleBar導航元件鴻蒙UI封裝元件
- windows 根據標題,關閉程式Windows
- iOS11縮小介面導航欄與標籤欄異常的問題iOS
- 根據字典,轉成相應的進位制
- JavaScript字串物件 之 根據字元返回位置、根據位置返回字元、字串操作方法JavaScript字串物件字元
- Vue 導航 點選當前標題變色Vue
- 根據欄位查表名
- iOS系統導航欄自定義標題動畫跳變解析iOS動畫
- 側欄能夠定位的導航選單程式碼例項
- 點選標題下拉展開二級子標題導航選單
- 欄目總導航—MXCMSSiteNavi標籤說明
- android短影片開發,uniapp頁面捲軸到指定位置AndroidAPP
- 拖動滾動條實現側欄導航定位效果
- flutter全屏沉浸式狀態列+標題欄|flutter凸起Tabbar導航FluttertabBar
- iOS 導航欄的控制iOS
- 從錨點到關鍵點,最新的目標檢測方法發展到哪了
- angular中使用a標籤的錨點Angular
- CARDS主題 & 導航欄樣式修改