当前位置: 首页 > news >正文

【h5 uniapp】 滚动 滚动条,数据跟着变化

uniapp项目

在这里插入图片描述

需求:
向下滑动时,数据增加,上方的日历标题日期也跟着变化
向上滑动时,上方的日历标题日期跟着变化

实现思路:

  1. 初次加载目前月份的数据 以及下个月的数据 this.getdate()
  2. 触底加载 下个月份的数据 onReachBottom()
  3. 向上滑动,监听页面滚动onPageScroll() 得到 距离顶部的高度 res.scrollTop
  4. 距离顶部的高度 除以 每个数据块的 高度 再 向下取整 ,得到的数 与 数据的下标 做对比 刚好等于的 说明 正停留在这个数据块,再把数据中的年和月赋值给标签(具体代码实现在 onPageScroll 函数 里)

全文源码

<template><view class="u-p-b-150"><u-sticky><view class="flex_spacebetween u-p-l-40 u-p-r-32 u-p-y-22 u-bg-007 u-color-fff"><view class="u-flex u-f-s-38 u-f-w-600 u-c-p" @click.stop=""><view>{{yue | MonthTrans}} {{nian}}</view><image src="@/static/img/law/you1.png" mode="" class="u-w-32 u-h-32 u-m-l-24"></image></view><view class="bianji" @click.stop="$u.route('/pages/time/edit')">Edit</view></view><!-- 周几 --><view class="riqi u-flex u-p-x-24"><view>Mon</view><view>Tue</view><view>Wed</view><view>Thu</view><view>Fri</view><view>Sat</view><view>Sun</view></view></u-sticky><!-- 几号 --><view class="u-flex wrap u-p-x-19 yuansu"><view class="u-text-center u-m-t-24 hao " :class="item.choose?'haoAct':''" v-for="(item,i) in list" :key="i"><view>{{item.name}}</view><view v-if="item.choose" class="u-p-t-10">{{item.hour}}hr</view></view></view><lawTabbar :current='2'></lawTabbar></view>
</template><script>import {lsLawyerTimeMonth} from "@/api/index/index.js"import lawTabbar from '@/components/lawTabbar.vue'export default {components: {lawTabbar},data() {return {jinnian: '', // 记录 当前时间年份,不改变jinyue: '', // 记录 当前时间月份,不改变yuefen: '', // 当前时间  示例 2023-10-01  传值用nian: '', // 页面显示用yue: '', // 页面显示用nianyueri: '', // 现在的 2022-2-12-01xianianyueri: '', // 下一个月份 2022-2-12-01list: [// {choose:true,hour:'4hr',name:1},],scrollTop: 0}},filters: {MonthTrans(val) {let result = nullswitch (val) {case 1:return (result = 'January')breakcase 2:return (result = 'February')breakcase 3:return (result = 'March')breakcase 4:return (result = 'April')breakcase 5:return (result = 'May')breakcase 6:return (result = 'June')breakcase 7:return (result = 'July')breakcase 8:return (result = 'August')breakcase 9:return (result = 'September')breakcase 10:return (result = 'October')breakcase 11:return (result = 'November')breakcase 12:return (result = 'December')break}return result},},onShow() {this.list = [];this.getdate();},onLoad(option) {// this.getwidth();// yuansu 监听某个div 到达顶部},// mounted(){//  window.addEventListener('scroll',this.handleScrollx,true)// },// // 需要在页面销毁时,移除监听事件,避免了内存泄漏// beforeDestroy() {// 		window.removeEventListener("scroll",this.handleScrollx);// },methods: {// handleScrollx() {// 	// console.log(this.list.length)//   console.log('滚动高度',window.pageYOffset);//  },// 获取当前  年与月份getdate() {let that = this;var today = new Date();var year = today.getFullYear();var month = today.getMonth() + 1;var jinday = today.getDate();this.jinnian = year;this.jinyue = month;// 获取每月是多少天var day = new Date(year, month, 0).getDate();console.log(month + '月有' + day + '天');// 本月for (var i = 0; i < day; i++) {this.list.push({choose: false, // 是否选中hour: 0, // 总共多长时间name: i + 1, // 日month: month, // 月nian: year, // 年riqi: year + '-' + month + '-' + (Number(i + 1) < 10 ? '0' + Number(i + 1) : Number(i +1)) // 日期 2023-11-18});}// 获取每月1号是 周几let one = month + '/1' + '/' + year; //   10/1/2023// var weekArr = ['星期天','星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];var weekArr = ['0', '1', '2', '3', '4', '5', '6'];var week = weekArr[new Date(one).getDay()];console.log(month + '月1号是周' + week);let arr = []if (week == 2) {arr = [{name: ''}]} else if (week == 3) {arr = [{name: ''}, {name: ''}]} else if (week == 4) {arr = [{name: ''}, {name: ''}, {name: ''}]} else if (week == 5) {arr = [{name: ''}, {name: ''}, {name: ''}, {name: ''}]} else if (week == 6) {arr = [{name: ''}, {name: ''}, {name: ''}, {name: ''}, {name: ''}]} else if (week == 0) {arr = [{name: ''}, {name: ''}, {name: ''}, {name: ''}, {name: ''}, {name: ''}]}this.list = arr.concat(this.list);this.yuefen = year + '-' + month + '-01';this.nianyueri = year + '-' + month + '-' + jinday;this.nian = year;this.yue = month;uni.showLoading({title:'Loading'});this.getlist();setTimeout(function() {that.jiaFun();}, 300);},jiaFun() {// 月份加1var date2 = new Date(this.nianyueri);date2.setMonth(date2.getMonth() + 1);this.xianianyueri = this.DateToString(date2, 'yyyy-MM-dd')// console.log(this.xianianyueri ,'下一个月');var today1 = new Date(this.xianianyueri);var year1 = today1.getFullYear();var month1 = today1.getMonth() + 1;var jinday1 = today1.getDate();// 获取下一个月每月是几天var day1 = new Date(year1, month1, 0).getDate();console.log(this.xianianyueri + '有多少天' + day1)for (var i = 0; i < day1; i++) {this.list.push({choose: false, // 是否选中hour: 0, // 总共多长时间name: i + 1, // 日month: month1, // 月nian: year1, // 年riqi: year1 + '-' + month1 + '-' + (Number(i + 1) < 10 ? '0' + Number(i + 1) : Number(i +1)) // 日期 2023-11-18});}console.log(this.list, '所有')this.yuefen = this.xianianyueri;this.getlist();},// 月份 加1 DateToString(date, fmt) {var o = {'Q+': Math.floor((date.getMonth() + 3) / 3), // 季度'M+': date.getMonth() + 1, // 月份'd+': date.getDate(), // 日'h+': (date.getHours() % 24 == 0) ? '00' : date.getHours() % 24, // 小时'H+': date.getHours(), // 小时'm+': date.getMinutes(), // 分's+': date.getSeconds(), // 秒'f+': date.getMilliseconds() // 毫秒};var week = {'0': '/u65e5','1': '/u4e00','2': '/u4e8c','3': '/u4e09','4': '/u56db','5': '/u4e94','6': '/u516d'};if (/(y+)/.test(fmt))fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));if (/(E+)/.test(fmt))fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') :'') + week[date.getDay() + '']);for (var k in o) {if (k == 'f+') {if (new RegExp('(' + k + ')').test(fmt)) {var regExp0 = '000000000' + o[k];fmt = fmt.replace(RegExp.$1, regExp0.substr(regExp0.length - RegExp.$1.length));}} else {if (new RegExp('(' + k + ')').test(fmt))fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));}}return fmt;},getlist() {let data = {yuefen: this.yuefen,lawyerId: uni.getStorageSync('lawyerId')}lsLawyerTimeMonth(data).then(res => {uni.hideLoading();res.rows.forEach(item => {this.list.forEach(itemdata => {if (item.riqi == itemdata.riqi) {itemdata.choose = true;itemdata.hour = item.zongTime;}});});});}},//监听页面滚动onPageScroll(res) {let that = this;let a = 0a = res.scrollTop / 300;a = parseInt(a);if (a == 0) {that.nian = this.jinnian;that.yue = this.jinyue;} else {that.list.forEach((item, i) => {if (i / 29 == a + 1) {that.nian = item.nian;that.yue = item.month;}});}},// 触底加载onReachBottom() {console.log('触底加载', this.yue, this.nian);console.log('现在的月份', this.yuefen);var date = new Date(this.yuefen);date.setMonth(date.getMonth() + 1);this.yuefen = this.DateToString(date, 'yyyy-MM-dd');var today1 = new Date(this.yuefen);var year1 = today1.getFullYear();var month1 = today1.getMonth() + 1;var jinday1 = today1.getDate();// 获取下一个月每月是几天var day1 = new Date(year1, month1, 0).getDate();console.log(this.yuefen + '有多少天' + day1)for (var i = 0; i < day1; i++) {this.list.push({choose: false, // 是否选中hour: 0, // 总共多长时间name: i + 1, // 日month: month1, // 月nian: year1, // 年riqi: year1 + '-' + month1 + '-' + (Number(i + 1) < 10 ? '0' + Number(i + 1) : Number(i +1)) // 日期 2023-11-18});}this.nian = year1;this.yue = month1;this.getlist();},// onPullDownRefresh() {// 	this.pageNum = 1;// 	this.getlist();// 	setTimeout(function() {// 		uni.stopPullDownRefresh();// 	}, 1000);// }}
</script><style lang='scss' scoped>.bianji {width: 120rpx;height: 56rpx;border-radius: 28rpx;border: 2rpx solid #FFFFFF;font-size: 30rpx;font-family: Helvetica-Bold, Helvetica;font-weight: bold;line-height: 56rpx;text-align: center;cursor: pointer;}/* 750 - 48 / 7 == 100 2200 - 48 / 7 == 307*/.riqi {background: #F7F7F7;font-size: 30rpx;font-family: Helvetica;padding: 30rpx 0;view {cursor: pointer;width: 100rpx;text-align: center;}}.hao {font-size: 30rpx;font-family: Helvetica;padding-top: 16rpx;height: 124rpx;border-radius: 8rpx;width: 96rpx;box-sizing: border-box;margin: 0 3rpx;}.haoAct {background: #E5F7FF;color: #0078B2;font-family: Helvetica-Bold, Helvetica;font-weight: bold;}@media only screen and (min-width: 750px) {.riqi {view {width: 307rpx;}}.hao {width: 302rpx;}}
</style>```

相关文章:

【h5 uniapp】 滚动 滚动条,数据跟着变化

uniapp项目 需求&#xff1a; 向下滑动时&#xff0c;数据增加&#xff0c;上方的日历标题日期也跟着变化 向上滑动时&#xff0c;上方的日历标题日期跟着变化 实现思路&#xff1a; 初次加载目前月份的数据 以及下个月的数据 this.getdate()触底加载 下个月份的数据 onReach…...

ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …...

django|报错SQLite 3.8.3 or later is required的解决方案

迁移原同事写的程序&#xff0c;到新服务器上边。运行报错。解决方案有三种 降低django版本升级sqlite3&#xff0c;不低于3.8.3版本修改django源码 方案一、降低django版本 卸载高版本django pip uninstall django安装低版本&#xff0c;如 pip install django2.1.7注意&…...

通达OA get_datas.php前台sql注入-可获取数据库session登入后台漏洞复现 [附POC]

文章目录 通达OA get_datas.php前台sql注入-可获取数据库session登入后台漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 通达OA get_datas.php前台sql注入-可获取数据库session登入后台漏洞复现…...

苹果官方:所有国行iPhone 15系列都在中国生产!

近几年来&#xff0c;国内供应链逐渐外迁&#xff0c;而拥有庞大劳动力市场的印度却成为了香饽饽&#xff0c;逐渐获得越来越多企业的重视&#xff0c;就连苹果公司也将其视为发展的重要战略要地。 自从苹果扩大印度生产iPhone规模后&#xff0c;很快流言四起&#xff0c;各种负…...

Oracle 安装及 Spring 使用 Oracle

参考内容&#xff1a; docker安装oracle数据库史上最全步骤&#xff08;带图文&#xff09; Mac下oracle数据库客户端 Docker安装Oracle docker能安装oracle吗 Batch script for add a auto-increased primary key for exist table with records Docker 安装 Oracle11g 注意&a…...

element-ui 表格 点击选中

element-ui 表格 点击选中 复制element ui 表格 <template><el-table:data"tableData"style"width: 100%"><el-table-columnprop"date"label"日期"width"180"></el-table-column><el-table-col…...

畅通工程之局部最小花费问题 (C++)

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 结果 题目&#xff1a; 思路&#xff1a; 详细思路都在代码注释里 。 代码&#xff1a; #include<iostream>//无向图邻接矩阵 #include<map> #include<algorithm> #define mvnum 1005 using …...

Sql 异常 + Error

目录 1、Sql 异常 1、SQL Error 1、 Out of sort memory,consider increasing server sort buffer size 2、MySQL排序规则不同关联报错 3、MySQL ....LIMIT 15 4、MySQL&#xff1a;Data truncation: Invalid JSON text 5、MySQL:Duplicate entry ‘xx‘ for key ‘xxxx…...

基于UNI-APP实现适配器并保证适配器和实现的调用一致

概述 前端功能的实现是基于不同的环境采用不同的实现方式的。一种是企业微信小程序&#xff0c;需要基于企业微信框架实现。一种是移动APP&#xff0c;需要基于uni-app的中底层实现。为了调用方便&#xff0c;需要将两种实现统一在一种适配器中&#xff0c;调用者只需要指定环…...

使用jdk21预览版 --enable-preview

异常 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project sb3: Compilation failure [ERROR] --enable-preview 一起使用时无效 [ERROR] &#xff08;仅发行版 21 支持预览语言功能&#xff09; 解决…...

js中的跳转都有哪些格式

location.href "URL" &#xff1a;用于在当前窗口中加载其他页面。 例如&#xff1a;location.href "https://www.google.com" location.replace("URL")&#xff1a;用于在当前窗口中加载其他页面&#xff0c;但不保留原页面的历史记录&#…...

无重复字符的最长子串

题目 添加链接描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb" 输出…...

C语言--输入10个数字,要求输出其中值最大的元素和该数字是第几个数

今天小编带大家了解一下什么是“打擂台”算法。 一.思路分析 可以定义一个数组arr&#xff0c;长度为10&#xff0c;用来存放10个数字&#xff0c;设计一个函数Max&#xff0c;用来求两个数中的较大值&#xff0c; 定义一个临时变量tmparr[0],保存临时最大的值&#xff0c;下标…...

如何做好功能测试,提升测试质量和效率?

要做好功能测试并提升测试质量和效率&#xff0c;可以考虑以下几个方面&#xff1a; 1. 明确测试目标和需求 在开始功能测试之前&#xff0c;首先要明确测试的目标和需求&#xff0c;包括测试的范围、重点、预期结果等。这有助于为测试工作提供清晰的方向和指导。 2. 制定详细…...

高德地图添加信息弹窗,信息弹窗是单独的组件

//弹窗组件 <template><el-card class"box-card" ref"boxCard" v-if"showCard"><div slot"header" class"clearfix"><div class"title">{{ model.pointName }}</div><div class…...

Apache Arrow优点

优点 采用连续的内存布局&#xff0c;在单机计算的时候&#xff0c;对操作系统友好&#xff0c;增加了缓存命中率以及读取数据的效率采用列式存储&#xff0c;在单机计算的时候&#xff0c;可以利用SMID向量化处理&#xff0c;并且增加了查询效率&#xff08;一般查询的时候只…...

【Linux权限:系统中的数字锁与安全之门】

1.Linux下的用户 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情。超级用户的命令提示符是“#”&#xff0c;普通用户的命令…...

笔记本电脑的麦克风没有声音

笔记本电脑的麦克风没有声音是一个常见的问题&#xff0c;可能是由于以下几个原因导致的&#xff1a; 第一&#xff0c;麦克风没有启用或者被禁用了。在Windows系统中&#xff0c;右键单击任务栏上的音量图标&#xff0c;选择“录音设备”&#xff0c;在弹出窗口中找到麦克风&a…...

20道简单的投资数学逻辑

20道简单的投资数学逻辑 &#xff08;非常好&#xff0c;强烈推荐&#xff0c;其中第3、第11的案例太经典了&#xff0c;是我反复给金融研究生讲授分析的案例&#xff09; 1、关于收益率 假如你有100万&#xff0c;收益100%后资产达到200万&#xff0c;如果接下来亏损50%&am…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...