一开始我想实现一个办法
就是在滑鼠滚动到指定位置时
我指定的区块会浮现出来
滑鼠往上滚时,区块会一起消失
於是此处是一开始的程序
const About=document.getElementsByClassName('about')[0];
const [scroll,setScroll]=useState(
document.body.offsetTop>About.offsetTop?true:false
);
window.onscroll=()=>{
setScroll(
document.body.offsetTop>About.offsetTop?true:false
);
const scrollFade={opacity:scroll?'1':'0',paddingTop:scroll?'100px':'300px'};
想当然尔
开始出现报错
TypeError: Cannot read properties of undefined (reading 'offsetTop')
(因为我还是个react小白...这边我还是不知道为什麽会报错)
甚至是以为前面的document.body.offsetTop有问题
改为window.scrollY
(後来测试是两种方法都可以用)
於是我把这段的逻辑改成false
const [scroll,setScroll]=useState(false);
让网页一开始读取时
区块是隐藏的
一开始的想法逻辑是
不管我在网页何处重新读取
都会先经过useState的三元判断式先判断
来达成区块是否隐藏的目的
但改为false因为後面的状态改变
一样有达到同样的目的
再来是第二段window.onscroll碰到的问题
在这边我忘了这个方法重复使用的话
前面使用的方法会被覆盖过去
於是後来使用addEventLisener
後来完整的写法为
const [scroll,setScroll]=useState(false);
window.addEventListener('scroll',()=>{
const About=document.getElementsByClassName('about')[0];
setScroll(
window.scrollY>About.getBoundingClientRect().top?true:false
);
});
这边为什麽会使用getBoundingClientRect()这个方法呢?
是因为发现offsetTop会比getBoundingClientRect().top
感应到的距离来的更远
offsetTop必须在指定目标过了视窗才会感应
於是选择使用getBoundingClientRect().top这个方法
更能贴近我所想要的效果
>>: 【Vue】帮元件加上样式啦|修改 bootstrap 变数供全域样式共用 失败
【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...
Abstract 在第八天我们已得知既有的Autowird与Qualifier等常用的注入方式,今天...
延续昨天的v-model绑定,昨天我们知道他可以绑定input, textarea和select e...
D15. 字元阵列(2) 前一篇有讲到字元的输出是printf("%c",a[i...
前言 React hooks 是在 React 16.8 版本才加进来的功能。那到底什麽是 Hook...