滚动条隐藏的dom滚动到当前视图的功能实现复盘

需求定位:

要实现功能:实现指示器中当前等级滚动到视口

什么时候滚?页面一进来(useEffect)

思路一:

1.计算出最后一个等级的dom距离父级dom左上角的距离distance,

2.把父级滚动条scrollTo(distance,0)

方案一:document.getElementById获取dom

父id="indicatorsParent" 子id={`indicators-${index}`}
const distance = document.getElementById(`indicators-${indicatorIndex}`).offsetLeft
document.getElementById('indicatorsParent').scrollTo( distance, 0)

方案二:ref获取dom

父ref={indicatorsListRef} 
子ref={e=>{indicatorsRefList.current[`indictorsItem-${index}`]=e}} 
//indicatorsRefList.current[`indictorsItem-${indicatorIndex}`]中indictorsItem-${indicatorIndex}是某一个具体类名 
//获取当前等级距离父元素左边距离
const distance = indicatorsRefList.current[`indictorsItem-${indicatorIndex}`].offsetLeft 
//把盒子中滚动条滚动到相应的距离
indicatorsListRef.current.scrollTo( distance, 0)

思路二:

直接让当前子dom(对应index)出现再视野范围内(浏览器自带的scrollIntoView())

indicatorsRefList.current[`indictorsItem-${indicatorIndex}`].scrollIntoView()

补充需求:当点击最右边时候后一个出现在视野中,点击最左边前一个出现在视野中

1.寻找点击事件

2.把index—1和index+1 滚动到当前视野

3.需要判断极限情况:若已经是第一个显示第一个 大与最后一个(数组长度-1)显示最后一个

4.代码优化 善于用es6语法

综上:

1.没有滚动条解决方案自己的思路,严重依赖与参考别人思路,导致被陷进去了

2.对于scrollTo(element.scrollTo(0, 1000)) offsetLeft(可直接获取距离父元素最左边的距离) scrollIntoView(页面可滚动时有用)用的不熟

3.不熟悉ref的使用(注意函数式组件和类组件中ref不同用法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值