uniapp利用scroll-view实现左边按钮定位右边页面滚动

前言:如果左边数据少的话其实可以不用scroll-view,直接弄出一块一块可以点击的就行,我这里是数据还没有确定,所以需要写个scroll-view提前准备,因为数据多和少都可以使用scroll-view

-----------------------------------------------------无情的分割线-------------------------------------------------------

1.首先我们准备一个容器(flex布局)包裹住两边scroll-view,然后分为左右两块:先写左边

<view class="left">
<scroll-view scroll-y="true" class="sll" :scroll-into-view="'tab'+tab">
<view class="item" v-for="(item,index) in leftlist" :key="item.id" :class="idx==index?'choose':'item'" @click="clksc(index)" :id="'tab'+index">
<view class="small" v-show="idx==index"></view>	<view class="fontt">{{item.name}}
</view>
</view>
</scroll-view>
</view>

2.再写右边的scroll-view:数据写的有点乱但是我们主要看scroll-view的问题

<view class="right">
<scroll-view scroll-y="true" class="scroll" 
:scroll-into-view="'into'+into" 
:style="{ 'height': windowH + 'px' }">
<view v-for="(i,t) in rightlist" :key="i.id" class="right" 
:id="'into'+t" @touchmove="touch(t)">
<view class="top">{{i.name}}</view>
<view class="r-bom" v-for="(im,idx) in i.data" :key="idx">
<image :src="im.img"></image>
<view class="qiangwan" v-if="im.status">
<image src="../../static/已抢光.png" >
</image></view>
<view><text class="bigname">{{im.name}}</text>
<view class="goods-bom" v-if="im.jifen">
<text class="bigprice">55</text>
<text class="jifen">积分</text>
<text class="jia" v-if="im.jia">+</text>
<div class="jiu" v-if="im.jiu"><div class="money">¥</div><div class="j">9</div></div>
<view class="oldprice" v-if="im.old">或原价<text>¥98</text></view></view>
</view>
</view>
<lines></lines>
</view>
</scroll-view>
</view>

3.写这个的时候发现的问题:(大佬请绕道,本萌新遇到的问题,总结一下)

(1)首先我们利用scroll-into-view滚动出现了左边点了右边的没有反应,这时候我们还缺少一步。

(2)给我们的数据循环绑定一个id例如:id="不能以数字开头"+索引号,就是循环的index,绑定了id之后就可以实现滚动了......吗?还是不行,还缺少一个非常重要的一步,我在这里卡了一天

(3)然后我就觉得右边用scroll-view实现不了页面滚动,就是用了轮播图,但是发现轮播图不能实现上下的数据衔接在一起,它是页面分开的,所以我在这里卡了一天,最后看了个博主scorll-view的总结,顿时茅塞顿开,发现了一个非常重要的前提。

(4)就是每一个scroll-view都要给一个高度,这里的话我左边因为是fixed固定布局就固定高度了,但是右边的应该随着数据的增加,高度也要随之增加,那么我们就要在onReady页面生命周期使用获取高度方法,就可以实现左边按钮点击定位到右边相应的栏目,也可以右边滚动左边也随之滚动了

onReady() {
			// 计算屏幕剩余高度  填补剩余高度
			let _this = this
			uni.getSystemInfo({
				success(res) {
					_this.windowH = res.windowHeight
				}
			})
		}

点击左边定位到右边相应的栏目

滑动右边让左边定位到相应的位置

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
uni-app中,可以使用scroll-view组件来处理左侧菜单与右侧内容联动的问题。 首先,在页面上定义一个scroll-view组件,设置它的滚动方向为纵向,并设置它的高度为屏幕高度。在scroll-view组件中定义一个子容器,用来放置左侧菜单的列表项。 ``` <scroll-view class="left-menu" scroll-y style="height: 100vh;"> <view class="menu-list"> <!-- 左侧菜单列表项 --> </view> </scroll-view> ``` 在右侧内容区域中,也定义一个scroll-view组件,并设置它的高度为屏幕高度。在scroll-view组件中定义一个子容器,用来放置右侧内容的列表项。 ``` <scroll-view class="right-content" scroll-y style="height: 100vh;"> <view class="content-list"> <!-- 右侧内容列表项 --> </view> </scroll-view> ``` 为了实现左侧菜单与右侧内容的联动效果,可以在左侧菜单列表项上绑定一个点击事件,在事件处理函数中获取当前点击的菜单项的索引值,并将索引值传递给右侧内容列表项的scroll-view组件,通过设置scroll-into-view属性来滚动到对应的内容项。 ``` // 左侧菜单列表项点击事件处理函数 handleMenuClick(index) { // 获取右侧内容列表项的scroll-view组件 let scrollView = this.$refs.scrollView; // 获取右侧内容列表项子容器中的所有列表项 let contentItems = this.$refs.contentList.$children; // 遍历右侧内容列表项中的所有列表项 for (let i = 0; i < contentItems.length; i++) { // 如果当前列表项的索引值等于菜单项的索引值,则滚动到该列表项 if (i === index) { scrollView.scrollIntoView(`#item-${i}`); break; } } } ``` 最后,在右侧内容列表项中,为每个列表项设置一个唯一的id,并在scroll-view组件上设置scroll-into-view属性为当前选中的列表项的id。 ``` <scroll-view class="right-content" scroll-y style="height: 100vh;" ref="scrollView"> <view class="content-list" ref="contentList"> <!-- 右侧内容列表项 --> <view id="item-0">内容项1</view> <view id="item-1">内容项2</view> <view id="item-2">内容项3</view> ... </view> </scroll-view> ``` 这样就可以实现左侧菜单与右侧内容的联动效果了。当点击左侧菜单中的某个菜单项时,右侧内容列表项将自动滚动到对应的内容项位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值