<template> <view class="u-demo"> <view class="u-demo-wrap"> <view class="u-demo-title">演示效果</view> <view class="u-demo-area"> <view class="" :style="{ display: !top ? 'block' : 'none' }"> <view class="rect-block-1">第一个节点</view> <view class="rect-block-2">第2个节点</view> <view class="u-no-demo-here">节点信息为</view> <view class="u-demo-result-line">{{ JSON.stringify(result) }}</view> </view> <view class="jump-to-top"> <u-button @click="scrollToTop" :style="{ display: top ? 'block' : 'none' }"> 点我自动滚动到顶部 </u-button> </view> </view> </view> <view class="u-config-wrap"> <view class="u-config-title u-border-bottom">参数配置</view> <view class="u-config-item"> <view class="u-item-title">元素</view> <u-subsection :list="['第一个节点', '第2个节点']" @change="elChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">指定元素置顶</view> <u-subsection current="1" :list="['是', '否']" @change="topChange"></u-subsection> </view> </view> </view> </template> <script> export default { data() { return { result: '', scrollTop: 0, top: false }; }, onReady() { this.elChange(0); }, onPageScroll(e) { this.scrollTop = e.scrollTop; }, methods: { async elChange(index) { let el = index == 0 ? '.rect-block-1' : '.rect-block-2'; this.result = await this.$u.getRect(el); }, scrollToTop() { this.$u.getRect('.jump-to-top').then(res => { uni.pageScrollTo({ scrollTop: this.scrollTop + res.top, duration: 0 }); }); }, topChange(index) { this.top = index == 0 ? true : false; if(index == 1) { uni.pageScrollTo({ scrollTop: 0, duration: 0 }); } } } }; </script> <style lang="scss" scoped> .u-demo { min-height: 200vh; } .rect-block-1 { background-color: #a0cfff; padding: 26rpx 60rpx; color: #ffffff; display: inline-flex; margin: auto; } .rect-block-2 { background-color: #fcbd71; padding: 12rpx 8rpx; width: 60%; color: #ffffff; margin: 30rpx auto; } </style>