import'./index.less';importAnchor from './Anchor';importContent from './Content';exportdefault function index(){return(<div className="wrapper"><div className="header"></div><div className="content-wrapper">// 锚点组件<Anchor />// 页面内容组件<Content /></div><div className="footer"></div></div>);}
锚点组件
importReact,{ useState, useEffect, useRef } from 'react';exportdefault function Anchor(){const[currentIndex, setCurrentIndex]=useState(0);const isClickRef =useRef<any>(null);const timerRef =useRef<any>(null);const anchorList =['anchor-1','anchor-2','anchor-3','anchor-4'];
function onClickAnchor(item: string, index: number){const el = document.querySelector(`#${item}`) as HTMLElement;if(el){
window.scroll({
top: el.offsetTop -130,
behavior:'smooth',});}setCurrentIndex(index);// 点击时设置为true,为了防止同时执行滚动事件
isClickRef.current =true;// 清除定时器,防止滚动事件触发、出现走马灯闪烁问题if(timerRef.current)clearTimeout(timerRef.current);
timerRef.current =setTimeout(()=>{
isClickRef.current =false;},1000);}
function handlerScroll(){// 点击锚点时,不执行滚动函数if(isClickRef.current)return;// 获取滚动容器的滚动高度(这里相对于body滚动的)const scrollTop =
document.documentElement.scrollTop || document.body.scrollTop;// 获取所有content的item集合const contentList = document.querySelectorAll('.content div') as any;const offsetTopArr: any =[];
contentList?.forEach((item: any)=>{// 获取每个content中item的offsetTop
offsetTopArr.push(item.offsetTop);});for(let i =0; i < offsetTopArr.length; i++){// 当滚动条高度达到对应content中item的滚动高度、则将锚点设置为高亮状态if(scrollTop +120>= offsetTopArr[i]){setCurrentIndex(i);}}}useEffect(()=>{
window.addEventListener('scroll', handlerScroll);return()=>{
window.removeEventListener('scroll', handlerScroll);};},[]);return(<div className="anchor-wrapper">{anchorList?.map((item, index)=>(<div
key={item}
className={`${currentIndex === index &&'active'} item`}
onClick={()=>onClickAnchor(item, index)}>{item}</div>))}<div
className={`slide-bar slide-bar-${currentIndex}`}
style={{ top: `${currentIndex *60}px` }}></div></div>);}
页面内容组件
importReact from 'react';exportdefault function Content(){const contentList =[{ id:'anchor-1', content:'content-1'},{ id:'anchor-2', content:'content-2'},{ id:'anchor-3', content:'content-3'},{ id:'anchor-4', content:'content-4'},];return(<div className="content">{contentList?.map((item, index)=>(<div key={index} id={item.id} className="item">{item.content}</div>))}</div>);}
nvm ls // 看安装的所有node.js的版本nvm list available // 查显示可以安装的所有node.js的版本可以在可选列表里。选择任意版本安装,比如安装16.15.0
执行:
nvm install 16.15.0安装好了之后。可以执行:
…
Time and frame rate management
Time类: Time script reference page.
一些常见的属性有:
Time.time 返回从游戏开始经历的时间.Time.deltaTime 返回从上帧结束到现在经历的时间,和帧率成反比Time.timeScale 控制时间流逝的因子Time.fixe…
文章目录 java基础知识基本知识列表面对对象堆与栈的关系值修改与引用修改异常:错误异常 SSMspringMVCServletSpringMVC:基于 Servlet的 Spring Web 框架, spring控制反转 IoC(Inversion of Control)面向切面 Aop MybatisJDBCMybatis SpringB…