首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React项目中如何实现一个简单锚点目录定位

前言 锚点目录定位功能在长页面和文档类网站中非常常见,它可以让用户快速定位到页面某个章节 如何React实现锚点定位和平滑滚动 目录自动高亮实现思路 处理顶部导航遮挡锚点解决方案 服务端渲染下实现方案...可以让元素父容器自动滚动,将这个元素滚动到可见区域。...此时就需要实现锚点定位和目录联动效果: 点击目录时,自动滚动到对应章节 滚动页面时,自动高亮正在浏览章节 目录导航组件 目录导航本身是一个静态组件,我们通过props传入章节数据: function...服务端渲染静态HTML,并没有绑定滚动事件,所以无法自动高亮。 预取数据 首先,我们需要解决点击目录链接问题。 既然服务端无法获取组件ref,那就需要在客户端去获取元素位置。...这样我们就可以在点击目录链接时,正确滚动到对应章节位置了。 数据注水 但是点击目录解决了一半问题,滚动高亮还需要解决。 这里就需要用到数据注水技术。

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React 实现 PDF 文件在线预览 - 手把手教你写 React PDF 预览功能

    嵌入pdfjs] 代码简单讲解下 getDocument 去请求pdf内容 getPage 获取对应页面的内容 使用 canvas 绘制当前页面 扩展阅读:《顶级开源 react ui 组件库测评推荐...点击对应页滚动到指定位置 滚动到对应位置,高亮当前页 先看下最终效果 [React PDFjs 搭建效果] 首先实现点击滚动到对应位置,非常简单,利用 scrollIntoView api 可以快速定位到指定位置...scrollIntoView({ behavior: 'smooth' }) } 再来实现下滚动位置自动高亮页数 本质上是使用 IntersectionObserver api 来完成,监听每个页面的可见性...Echarts 使用教程 - 如何React 加入图表 》 React PDF 在线预览源代码 本次教程代码可以在 github 上查看 假如你只需要预览 PDF 并且不关心浏览器兼容,那么使用...table 表格组件测评推荐》 React PDFjs 搭建总结及卡拉云 本文介绍了如何React 实现 PDF 预览功能。

    5.1K20

    懒加载 React页面 - 动态渲染组件

    背景 长页面在前端开发是非常常见。例如下图中电商首页,楼层数据来自运营人员在后台配置,楼层数量是不固定,同时每个楼层可能会依赖更多翻页数据。...在这种情况下,如果一次性将页面全部渲染,可想而知,我们页面直出效率(fmp, fid)会受到影响。 为了更好用户体验,我们需要考虑在用户滚动到下一屏时,渲染下一屏组件。 ?...设计思路 假设页面预期渲染 n 个组件,每个组件均会触发请求其他接口。设计这样一个长页面,我们主要会面临以下两个问题: 渲染下一屏组件时机应该如何判断?...在数据反复更新过程如何让组件不重复发起数据请求? ? 图 1 一、渲染下一屏时机 1....在写一个普通页面的过程,如果追求完成,那么将会非常简单,但如果想要进一步优化,那可做事情就有很多了。

    3.5K20

    蜕变之始,useEffect 最后一种用法

    React 开发指导思想是数据驱动 UI,因此在 React 程序,我们总是会思考如何设计与 UI 保持一致数据,把解决问题重心放在数据逻辑上。 但是这样思路并不能应对所有场景。...2 需求 在长页面滚动过程,我们常常会在页面的顶部或者旁边,放一个标识组件来告诉用户页面已经滚动到什么位置了。 在滚动过程,当前选中状态会自动变化到对应位置。...接下来我们思考一下这样功能应该如何实现。 本案例具体要实现效果如图 3 实现 实现原理比较简单,我们只需要判断每个元素什么时候应该出现在屏幕即可。... 在页面滚动过程,目标元素相对于可视区域位置会随时发生变化。...`${s.item} ${s.active}` : s.item}>案例一 这样,我们只需要在滚动过程,不停判断每个目标元素和视口相对位置,当符合条件目标元素出现在视口时,就设置

    14310

    图解浏览器各种距离

    网页开发,我们经常要计算各种距离。...比如 OnBoarding 组件,我们要拿到每一步高亮元素位置、宽高: 比如 Popover 组件,需要拿到每个元素位置,然后确定浮层位置: 比如滚动页面底部,触发列表加载,这需要拿到滚动距离和页面的高度...首先,页面一般都是超过一屏,右边会出现滚动条,代表当前可视区域位置: 这里窗口部分是可视区域,也叫做视口 viewport。 如果我们点击了可视区域内一个元素,如何拿到位置信息呢?...我们看 y 轴方向好了,x 轴也是一样。 事件对象可以拿到 pageY、clientY、offsetY,分别代表到点击位置到文档顶部,到可视区域顶部,到触发事件元素顶部距离。..., useEffect, useRef } from 'react' function App() { const ref = useRef(null); const

    15410

    第三次重写个人网站,分享一些感想

    这篇文章会聊一聊网站每个部分实现思路,以及会说到我对设计一些想法和思路。 如果你也想写自己个人主页,希望这篇文章可以给你一些灵感。...: TypedOptions) => { const el = useRef(null); // span 元素 const typed = useRef...左、、右分别是 、、,简单。其中,左边中间那个正方体依然是个 Lottie 动画,右边 “海怪” 用是 HongLei 字体库。...0.8); } 75% { transform: scale(0.95, 1.05); } } Contact - 找到我 contact.gif 因为上面几个 section 背景都是跟随页面滚动...下面部分带有强烈主观色彩,不一定正确 我在主页里加入了很多入场动画,用到库是 react- reveal。 这个库功能是:当滚动到当前元素时,使用动画入场效果展示元素。 很实用一个库。

    1K50

    React 进阶 - 海量数据处理和其他细节

    PC 端一种常见数据请求加载场景,这种数据交互有一个问题就是,如果没经过处理,加载完成后数据展示元素,都显示在页面上,如果伴随着数据量越来越大,会使页面 DOM 元素越来越多,即便是像 React...虚拟列表,在长列表滚动过程,只有视图区域显示是真实 DOM ,滚动过程,不断截取视图有效区域,让人视觉上感觉列表是在滚动,达到无限滚动效果。...(除了缓冲区),剩下区域,不需要渲染真实 DOM 元素 虚拟列表就是通过这个方式来减少页面上 DOM 元素数量 实现思路 通过 useRef 获取元素,缓存变量 useEffect 初始化计算容器高度...> ) } } # 节流 节流函数一般也用于频繁触发事件,比如监听滚动滚动。...在 Vue.js 中有专门 dep 做依赖收集,可以自动收集字符串模版依赖项,只要没有引用 data 数据, 通过 this.aaa = bbb ,在 Vue.js 是不会更新渲染

    1.4K10

    第三次重写个人网站,分享一些感想

    这篇文章会聊一聊网站每个部分实现思路,以及会说到我对设计一些想法和思路。 如果你也想写自己个人主页,希望这篇文章可以给你一些灵感。...: TypedOptions) => { const el = useRef(null); // span 元素 const typed = useRef...左、、右分别是 、、,简单。其中,左边中间那个正方体依然是个 Lottie 动画,右边 “海怪” 用是 HongLei 字体库。...scale(1.2, 0.8); } 75% { transform: scale(0.95, 1.05); } } Contact - 找到我 因为上面几个 section 背景都是跟随页面滚动...下面部分带有强烈主观色彩,不一定正确 我在主页里加入了很多入场动画,用到库是 react-reveal。这个库功能是:当滚动到当前元素时,使用动画入场效果展示元素。 很实用一个库。

    86020

    React高手都善于使用useImprativeHandle

    React Hooks ,useImperativeHandle 是一个非常简单 hook,他比较小众,刚开始接触 React 学习朋友可能并不熟悉他。...现在我们要实现如下效果,当点击 Edit 按钮时,输入框自动获得焦点 我们知道,在 DOM ,只要得到 input 对象,然后就可以调用 .focus() 方法来实现目标。...当点击按钮时,我希望下方 input 自动获得焦点,并切中间滚动滚动到最底部。 现在,我们结合前面的知识来分析一下这个案例应该如何实现。.../> 我们期望点击按钮时,信息部分输入框自动获取焦点,信息部分信息展示区域能滚动到最底部,因此整个页面组件代码可以表示为如下: import { useRef } from 'react...05 Lottie 我上上周周末直播分享了在小程序如何实现 lottie 动画并封装成为简单易用 React 组件。

    33710

    10分钟教你手写8个常用自定义hooks

    本文是一篇以实战为主文章,主要讲解实际项目中如何使用hooks以及一些最佳实践,不会一步步再介绍一遍react hooks由来和基本使用,因为写hooks文章很多,而且官网对于react hooks...,这样可以让用户更好知道页面的主题和内容。...实现自定义useScroll 自定义useScroll也是高频出现问题之一,我们往往会监听一个元素滚动位置变化来决定展现那些内容,这个应用场景在H5游戏开发应用十分广泛,接下来我们来看看实现代码...,这个我们可以在函数组件采用ref和useRef来获取到,钩子返回了滚动x,y值,即滚动左位移和顶部位移,具体使用如下: import React, { useRef } from 'react'..."> { x }, { y } } 通过使用useScroll,钩子将会帮我们自动监听容器滚动变化从而实时获取滚动位置

    3K20

    手把手带你10分钟手撸一个简易Markdown编辑器

    「编辑区」和「展示区」页面同步滚动 编辑器工具栏工具实现 这里先放上我最终实现好了效果图: ?...其实是没问题,被解析好 html字符串 每个标签都被附带上了特定类名,只是现在我们引入任何样式文件,例如下图 ?...官方文档 (opens new window),这个库能帮你做就是检测代码块标签元素,并为其加上特定类名。...,这样就可以在 handleScroll 方法里区分此次滚动是被动触发还是主动触发了 import React, { useState, useRef, useEffect } from 'react...) = 300,此时展示区也同步滚动到了最底部,这样就实现了真正同步滚动了 来看一下改进后代码 import React, { useState, useRef, useEffect } from

    2K10

    手把手带你10分钟手撸一个简易Markdown编辑器

    「编辑区」和「展示区」页面同步滚动 编辑器工具栏工具实现 这里先放上我最终实现好了效果图: 我也将本文代码放在了 Github 仓库 (opens new window)上了,欢迎各位点个...),这个库能帮你做就是检测代码块标签元素,并为其加上特定类名。...import React, { useState, useRef, useEffect } from 'react' import markdownIt from 'markdown-it' import...,这样就可以在 handleScroll 方法里区分此次滚动是被动触发还是主动触发了 import React, { useState, useRef, useEffect } from 'react...) = 300,此时展示区也同步滚动到了最底部,这样就实现了真正同步滚动了 来看一下改进后代码 import React, { useState, useRef, useEffect } from

    1.5K20

    滚动怎么理解_scrollview不滚动

    本文介绍元素尺寸内容最多一部分——滚动scroll 滚动宽高 scrollHeight   scrollHeight表示元素总高度,包括由于溢出而无法展示在网页不可见部分 scrollWidth...  scrollWidth表示元素总宽度,包括由于溢出而无法展示在网页不可见部分   [注意]IE7-浏览器返回值是不准确   【1】没有滚动条时,scrollHeight与clientHeight...,但元素设置宽高小于元素内容宽高,即存在内容溢出情况时,scroll属性大于client属性   [注意]scrollHeight属性存在兼容性问题,chrome和safari浏览器,scrollHeight...> scrollIntoViewIfNeeded()   scrollIntoViewIfNeeded(true)方法在当前元素在视口中不可见情况下,才滚动浏览器窗口或容器元素,最终让它可见。...(1);} btn2.onclick = function(){test.scrollByPages(-1);} 滚动事件   scroll事件是在window对象上发生,它表示页面相应元素变化

    1.9K20

    美丽公主和它27个React 自定义 Hook

    另一个优点是存储数据与组件状态之间自动同步。每当存储数据发生更改时,该钩子会相应地更新组件状态。同样,当组件状态发生更改时,该钩子会自动将新值持久化到存储。...例如,在倒计时组件,以轻松地实现在特定持续时间后重置计时器。...它接受一个可选options参数,以自定义地理位置行为,允许我们根据特定需求微调准确性和其他设置。 该钩子自动处理加载状态,当获取地理位置数据时更新它,并在过程中出现任何问题时设置错误状态。...使用场景 我们可以在我们希望触发动画、延迟加载图像或在用户滚动时加载额外内容情况下,使用这个Hook。 要使用这个钩子,首先将其导入到我们组件文件。...修改此元素高度,使页面滚动,在滚动过程,可查看待验证元素可见性 待验证元素 {visible && "(Visible

    66320

    来自 React 19 背刺:forwardRef 被无情抛弃

    React 控制反转 IOC forwardRef 基础知识 React 19 ref 机制更改,forwardRef 被无情抛弃 useImperativeHandle 与 ref 新配合...全文共 3206 字,阅读预计花费 6 分钟 1、React 控制反转 在面向对象编程,IOC (Inversion of Control) 控制反转是一个非常高级概念。...因此,在 React 组件封装,并不支持直接获取到 input 引用,而是以一种传入控制器方式来调用它。...如果不传入依赖项,那么每次更新 createHandle 都会重新执行 在官方文档,有这样一个案例,演示效果如图所示,当我点击按钮时,下方 input 自动获取焦点,并且中间滚动滚动到最底部。...> Write a comment 我们期望点击按钮时,信息部分输入框自动获取焦点,信息部分信息展示区域能滚动到最底部,因此整个页面组件代码可以表示为如下

    55210

    玩转react-hooks,自定义hooks设计模式及其实战

    今天给大家讲讲我在工作react-hooks心得,和一些自定义hooks设计思想,把在工作经验分享给大家。 自定义hooks设计 又回到那个问题?什么是hooks。...还不明白react-hooks伙伴可以看另外一篇文章: react-hooks如何使用?...通过业务场景不同,我们到底需要react-hooks做什么,怎么样把一段逻辑封装起来,做到复用,这是自定义hooks产生初衷。 如何设计一个自定义hooks,设计规范 逻辑+ 组件 ?...实战一:控制滚动条-吸顶效果,渐变效果-useScroll 背景:公司一个h5项目,在滚动滚动过程,需要控制 渐变 + 高度 + 吸顶效果。 1实现效果 ? 1 首先红色色块有吸顶效果。...页面 import React from 'react' import { View, Swiper, SwiperItem } from '@tarojs/components' import useScroll

    1.9K20
    领券