uniapp开发小程序—scroll-view实现内容滚动时, 标题也滚动

一、需求

scroll-view实现内容滚动时, 标题也滚动

二、效果

在这里插入图片描述

三、代码实现

<template><view class="content"><view class="head">头部固定区域</view><view class="list_box"><!-- 菜单左边 --><view class="left"><scroll-view scroll-y="true" class="scroll"><view class="item" v-for="(item,index) in leftArray" :key="index":class="{ 'active':index==leftIndex }" :data-index="index" @tap="leftTap">{{item.id}}</view></scroll-view></view><!-- 右侧内容部分 --><view class="main"><scroll-view scroll-y="true" @scroll="mainScroll" class="scroll" :scroll-into-view="scrollInto":scroll-with-animation="true" @touchstart="mainTouch" id="scroll-el"><block v-for="(item,index) in mainArray" :key="index"><scroll-view class="right-scroll"  :id="'item-'+index"><!-- :scroll-x="true" 加上可以横向滑动 --><block v-for="(item2,index2) in item.list" :key="index2"><view class="item"><view class="goods"><view>左边是第{{ index + 1 }}</view><view>右边是第{{ index2+1 }}</view></view></view></block></scroll-view></block></scroll-view></view></view></view>
</template><script>export default {data() {return {leftArray: [{id: 1},{id: 2},{id: 3},{id: 4},{id: 5},{id: 6},{id: 7},{id: 8},],mainArray: [],topArr: [],leftIndex: 0,isMainScroll: false,scrollInto: ''}},mounted() {this.getListData();},methods: {/* 获取列表数据 */getListData() {/* 因无真实数据,当前方法模拟数据 */let [left, main] = [[],[]];for (let i = 0; i < 8; i++) {left.push(`${i+1}类商品`);let list = [];for (let j = 0; j < (i + 1); j++) {list.push(j);}main.push({title: `第${i+1}类商品标题`,list})}this.mainArray = main;this.$nextTick(() => {setTimeout(() => {this.getElementTop();}, 10)});},//获取距离顶部的高度getScrollTop(selector) {return new Promise((resolve, reject) => {let query = uni.createSelectorQuery().in(this);query.select(selector).boundingClientRect(data => {resolve(data.top)}).exec();})},/* 获取元素顶部信息 */async getElementTop() {/* Promise 对象数组 */let p_arr = [];/* 遍历数据,创建相应的 Promise 数组数据 */for (let i = 0; i < this.mainArray.length; i++) {const resu = await this.getScrollTop(`#item-${i}`)p_arr.push(resu - 200)}/* 主区域滚动容器的顶部距离 */this.getScrollTop("#scroll-el").then((res) => {let top = res;// #ifdef H5top += 43; //因固定提示块的需求,H5的默认标题栏是44px// #endif/* 所有节点信息返回后调用该方法 */Promise.all(p_arr).then((data) => {this.topArr = data;});})},/* 主区域滚动监听 */mainScroll(e) {if (!this.isMainScroll) {return;}let top = e.detail.scrollTop;let index = -1;if (top >= this.topArr[this.topArr.length - 1]) {index = this.topArr.length - 1;} else {index = this.topArr.findIndex((item, index) => {return this.topArr[index + 1] >= top;});}this.leftIndex = (index < 0 ? 0 : index);// console.log('打印',this.leftIndex)},/* 主区域触摸 */mainTouch() {this.isMainScroll = true;},/* 左侧导航点击 */leftTap(e) {let index = e.currentTarget.dataset.index;this.isMainScroll = false;this.leftIndex = Number(index);this.scrollInto = `item-${index}`;}}}
</script><style lang="scss" scoped>.content {.head {width: 100%;height: 400rpx;background-color: pink;display: flex;align-items: center;justify-content: center;}.list_box {display: flex;flex-direction: row;flex-wrap: nowrap;justify-content: flex-start;align-items: flex-start;align-content: flex-start;font-size: 28rpx;height: calc(100vh - 400rpx);.left {width: 200rpx;background-color: orange;line-height: 80rpx;box-sizing: border-box;font-size: 32rpx;height: 100%;.item {padding-left: 20rpx;position: relative;&:not(:first-child) {margin-top: 1px;&::after {content: '';display: block;height: 0;border-top: #d6d6d6 solid 1px;width: 620upx;position: absolute;top: -1px;right: 0;transform: scaleY(0.5);}}&.active,&:active {color: #42b983;background-color: #fff;}}}.main {height: 100%;background-color: #fff;padding: 0 20rpx;width: 0;flex-grow: 1;box-sizing: border-box;.tips {line-height: 64rpx;font-size: 24rpx;font-weight: bold;color: #666;height: 64rpx;position: fixed;top: 44px;right: 0;width: 530rpx;z-index: 10;background-color: #fff;padding-left: 10rpx;}.right-scroll {height: calc(100vh - 400rpx);width: 100%;background-color: #efba21;border-bottom: 2rpx solid #fff;/* 横向滚动 */white-space: nowrap;flex-direction: row;.item {width: 100%;height: 100%;/* item的外层定义成行内元素才可进行滚动 inline-block / inline-flex 均可 */display: inline-flex;.goods {width: 100%;height: 100%;padding: 20rpx;box-sizing: border-box;background-color: #42b983;display: flex;flex-direction: column;flex-wrap: nowrap;justify-content: center;align-items: center;align-content: center;margin-bottom: 10rpx;border-right: 2rpx solid #fff;}.goods:last-child {border-right: 0;}}}.right-scroll:last-child {border-bottom: 0;}}.scroll {height: 100%;}}}
</style>

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对java的interface的理解

一个例子来让我们理解更加深刻 这是我们的整体文件布局 ①A是接口 ②B和C是用来实现接口的类 ③show是我们的运行函数&#xff0c;用来展示 A接口 接口中定义的方法可以不用去实现,用其他类去实现(必须实现) 关键字:interface public interface A { // public static …

threejs(18) - 地图模型加载

GeoJSON是什么 如果你接触过数据可视化&#xff0c;那么大概率会知道GeoJSON。不知道&#xff1f;没关系&#xff0c;本文将为您娓娓道来&#xff01; GeoJSON是一种对各种地理数据结构进行编码的格式&#xff0c;基于Javascript对象表示法的地理空间信息数据交换格式。 官网…

如何通过IDEA创建基于Java8的Spring Boot项目

上次发现我的IDEA创建Spring Boot项目时只支持11和17的JDK版本&#xff0c;于是就通过Maven搭建SpringBoot项目。 究其原因&#xff0c;原来是Spring官方抛弃了Java8&#xff01;&#xff01;&#xff01; 使用IDEA内置的Spring Initializr创建SpringBoot项目时&#xff0c;已…

Maven普通工程和web工程创建

文章目录 创建项目前设置maven工程前设置工作创建项目前--》设置utf-8配置maven参数Maven普通工程和web工程创建Maven简单工程第一步&#xff1a;File–New–Project 第二步&#xff1a;选择maven然后下一步&#xff1a;填写后询选择finish初始化maven工程目录简介maven简单工程…

day21-哈希表基础理论知识学习

day21-哈希表基础理论知识讲解 哈希表&#xff0c;也称为散列表&#xff08;Hash table&#xff09;&#xff0c;是一种用于存储和检索键值对的数据结构。它通过将键映射到数组中的特定位置来实现高效的数据访问。转自-代码随想录。 哈希表中关键码就是数组的索引下标&#x…

【NodeJS】nodejs提供websocket服务

背景 在开发业务系统的时候&#xff0c;根据开发人员不同的技术栈&#xff0c;会使用不同的技术来开发微服务。本文是基于NodeJS提供的websocket的服务。在websocket通过分片的方式将字符串进行切割传递。 正文 1、源码 server.js&#xff1a; const WebSocket require(ws…

PDF有编辑密码怎么办

目录 注意&#xff1a; windows方法&#xff1a; 1 python 下载 2 打开命令行 3 安装 pikepdf 4 编写python脚本 5 使用py脚本 6解密完成 Linux方法&#xff1a; 注意&#xff1a; 此方法可以用于破解PDF的编辑密码&#xff0c;而不是PDF的打开密码 当遇到类似如下问…

分子动力学模拟—LAMMPS 模拟(固体和液体)数据后处理软件(六)

记录一下检索到一篇分子动力学模拟数据后处理的软件。 感谢论文的原作者&#xff01; 主要功能&#xff1a; Structure Analysis Ackland Jones Analysis CentroSymmetry Parameter Common Neighbor Analysis Common Neighbor Parameter Atomic Structure Entropy Stein…

汽车生产污废水处理需要哪些工艺设备

对于汽车生产过程中产生的污废水处理&#xff0c;需要运用一系列的工艺设备来实现有效的清洁和回收利用。下面让我们一起来探索一下吧&#xff01; 首先&#xff0c;汽车生产工艺设备中最常见的是物理处理设备。物理处理包括沉淀、过滤和吸附等过程。其中&#xff0c;沉淀操作可…

游卡:OceanBase在游戏核心业务的规模化降本实践

从 2023 年 9 月测试 OceanBase&#xff0c;到如今 3 个核心业务应用 OceanBase&#xff0c;国内最早卡牌游戏研发者之一的游卡仅用了两个月。是什么原因让游卡放弃游戏行业通用的 MySQL方案&#xff0c;选择升级至 OceanBase&#xff1f;杭州游卡网络技术有限公司&#xff08;…

Web3与环保:区块链如何推动可持续发展

随着气候变化和环境问题日益严峻&#xff0c;社会对可持续发展的需求变得愈发迫切。在这个背景下&#xff0c;Web3技术和区块链崭露头角&#xff0c;成为推动可持续发展的关键力量。本文将深入探讨Web3技术如何与环保理念相结合&#xff0c;引领我们迈向更加可持续的未来。 1. …

2024年【G1工业锅炉司炉】考试题及G1工业锅炉司炉理论考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年G1工业锅炉司炉考试题为正在备考G1工业锅炉司炉操作证的学员准备的理论考试专题&#xff0c;每个月更新的G1工业锅炉司炉理论考试祝您顺利通过G1工业锅炉司炉考试。 1、【多选题】TSGZ6001-2019《特种设备作业人…