用JS操作窗口(react中),触底加载,回到顶部,吸顶,下拉刷新,示例代码

本文主要是介绍用JS操作窗口(react中),触底加载,回到顶部,吸顶,下拉刷新,示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

触底加载

创建loadMore函数

应用数据

回到顶部

 监听滚动容器的 scroll 事件

window.scrollY

创建回到顶部按钮 

吸顶

创建函数

 应用元素

css样式

下拉刷新

创建新增数据函数

加载时间函数

应用元素


触底加载

创建loadMore函数
   const [hasMore,setHasMore] = useState(true)const [len,setlen] =useState(2)const loadMore=()=> {if (window.innerHeight+window.screenY>=window.screenTop-1){setTimeout(() => {setlen(len + 4)setHasMore(len < list.length)}, 2000);}   }

通过比较窗口的可视区域高度和文档的滚动距离,判断是否滚动到了页面底部。这里使用了window.innerHeight来获取可视区域的高度,window.scrollY来获取文档的滚动距离,以及window.scrollY+window.innerHeight来获取文档可视区域的底部位置。

如果滚动到了页面底部,就执行一个延迟函数,使用setTimeout设定一个延迟时间(这里延迟2秒,通过2000来表示)。

在延迟函数中,执行更新状态的操作。通过调用setlen(len + 4)来增加一个变量len的值,这里将其增加了4,表示加载了4条数据。然后,使用setHasMore(len < list.length)来更新一个变量hasMore的值,这个变量表示是否还有更多数据可加载

应用数据

引用antd-mobile中无限滚动

import { InfiniteScroll,List} from 'antd-mobile'//组件包裹数据
<List><div>{list.slice(0,len).map((item,index)=>(<span>{item}</span>))}</div></List><InfiniteScroll loadMore={loadMore} hasMore={hasMore} ></InfiniteScroll> 

回到顶部

 监听滚动容器的 scroll 事件

检测是否滚动到了底部。你可以使用 element.addEventListener('scroll', callback) 方法来注册一个监听器,其中 element 表示滚动容器元素,callback 表示在滚动事件触发时执行的函数。在该函数中,可以获取滚动容器的滚动位置和当前容器的高度、滚动条高度等信息,以判断是否已经触底(即滚动条滚动到底部)。

    const [toup, settoup] = useState(false);//用来判断是否出现回到顶部按钮useEffect(()=>{getdata()const handleScroll = () => {// 回到顶部const scrollTop = window.scrollY;const shouldScroll = scrollTop > 0;setShouldScrollToTop(shouldScroll);settoup(shouldScroll)};window.addEventListener('scroll', handleScroll);return () => {window.removeEventListener('scroll', handleScroll);};},[])
window.scrollY

是一个只读属性,用于返回窗口在垂直方向上已滚动的像素值。它提供了当前窗口垂直滚动位置的信息。

可以通过以下示例代码来获取并使用 window.scrollY 的值:

const handleScroll = () => {const scrollY = window.scrollY;console.log(scrollY); // 输出窗口垂直滚动的像素值// 进一步处理滚动事件
};
​
window.addEventListener('scroll', handleScroll);

在上面的示例中,handleScroll 函数中的 scrollY 变量将存储 window.scrollY 的当前值。你可以将其用于进一步处理滚动事件,例如更新 UI 或执行特定的操作。

请注意,window.scrollY 是只读的,因此不能将其用于更改窗口的滚动位置。如果你想要滚动窗口,请使用 window.scrollTo() 或其他相关方法。

创建回到顶部按钮 
  const backup =()=>{window.scrollTo({top:0,behavior:'smooth'})}

根据toup的布尔值来决定按钮是否出现 

<div>{toup && (<div style={{background:'orange',width:'30px',lineHeight:'30px',height:'30px',
position:'fixed',bottom:'10px',zIndex:'999'}}><ArrowUp onClick={backup}></ArrowUp></div>)}
</div>

 

吸顶

创建函数

同样也需要监听滚动容器的 scroll 事件,这里直接放入上边的函数

创建isSticky确定吸顶元素的样式

 const [isSticky, setIsSticky] = useState(false);useEffect(()=>{getdata()const handleScroll = () => {// 回到顶部const scrollTop = window.scrollY;const shouldScroll = scrollTop > 0;setShouldScrollToTop(shouldScroll);settoup(shouldScroll)// 吸顶window.scrollY > 0 ? setIsSticky(true) : setIsSticky(false);};window.addEventListener('scroll', handleScroll);return () => {window.removeEventListener('scroll', handleScroll);};},[])
 应用元素
<div className={`sticky-header ${isSticky ? 'sticky' : ''}`}><SearchBar placeholder='请输入内容' onFocus={() => {navigate('/search')}}/></div>
css样式
.sticky-header {/* Your header styles */transition: all 0.3s ease-in-out;}.sticky {position: sticky;top: 0;z-index: 999;}

 

下拉刷新

创建新增数据函数
import React, { useState } from 'react'
import { PullToRefresh, List } from 'antd-mobile'export default function Search() {function getNextData() {const ret = []for (let i = 0; i < 5; i++) {const randomNumber = Math.floor(Math.random() * 900) + 100;ret.push(randomNumber);}return ret}const [data, setData] = useState(() => getNextData())

const [data, setData] = useState(() => getNextData()):这行代码是使用 React 中的 useState 钩子来声明一个状态变量 data 和一个更新状态的函数 setDatauseState(() => getNextData()) 表示初始状态是通过调用 getNextData() 函数得到的。

useState(() => getNextData()) 是一个自执行的函数,它会在组件第一次渲染时执行一次,并返回初始的状态值。初始状态值是通过 getNextData() 函数来获取的。

加载时间函数
  function sleep(ms) {return new Promise(resolve => setTimeout(resolve, ms));
}
应用元素
 <PullToRefreshonRefresh={async () => {await sleep(1000)setData([...getNextData()])}}><List style={{ minHeight: '100vh' }}>{data.map((item, index) => (<List.Item key={index}>{item}</List.Item>))}</List></PullToRefresh>

这篇关于用JS操作窗口(react中),触底加载,回到顶部,吸顶,下拉刷新,示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587567

相关文章

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J