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
- 直播軟體app開發,導航條根據位置移動實現定位、顏色過渡動畫效果APP動畫
- HTML 錨點定位HTML
- 頭部導航欄也是動態的,板塊裡面的內容根據頭部導航欄動態展現資料
- css 錨點定位 -- scrollIntoViewCSSView
- js,javascript 根據 xpath 路勁定位節點JSJavaScript
- 構建動態互動式H5導航欄:滑動高亮、吸頂和錨點導航技巧詳解H5
- 導航欄的隱藏問題
- 導航欄點選選中
- uniapp---wap2app去掉系統自帶的導航欄APP
- 百度地圖:根據位置獲取座標地圖
- uni-app動態修改頂部導航欄標題APP
- android短影片開發,uniapp頁面捲軸到指定位置AndroidAPP
- 根據字典,轉成相應的進位制
- JavaScript字串物件 之 根據字元返回位置、根據位置返回字元、字串操作方法JavaScript字串物件字元
- 微信小程式-錨點定位微信小程式
- Vue 導航 點選當前標題變色Vue
- 根據欄位查表名
- 基於鴻蒙ArkUI封裝標題欄TitleBar導航元件鴻蒙UI封裝元件
- flutter全屏沉浸式狀態列+標題欄|flutter凸起Tabbar導航FluttertabBar
- iOS系統導航欄自定義標題動畫跳變解析iOS動畫
- CARDS主題 & 導航欄樣式修改
- 從錨點到關鍵點,最新的目標檢測方法發展到哪了
- angular中使用a標籤的錨點Angular
- 點選導航欄使當前欄目背景變色
- HarmonyOS NEXT 5.0自定義增強版導航欄元件|鴻蒙ArkUI自定義標題欄元件鴻蒙UI
- Flutter 導航欄AppBarFlutterAPP
- HTML網頁根據座標模擬滑鼠點選HTML網頁
- 點選導航欄切換背景色效果
- scrollIntoView()實現通訊錄功能-錨點定位View
- jQuery點選平滑跳轉到頁面指定位置jQuery
- qml 導航欄TabBar 工具欄ToolBartabBar
- AI應用之根據行業標準生成PRD文件AI行業
- 2018.3.30 邊框應用與導航欄設定
- list集合根據某欄位分組