react实现饿了吗左右级联列表

最近在学校写一个小项目,要求实现一个类似饿了么的网站,但是不是卖人吃的,卖的是。。。。。

从网上找了找没有找到比较好的,所以决定自己动手写一个。

其实左右级联实现的方法其实也很简单,设置父元素的css

 height: 100%;
 overflow: scroll;

因为用的是百分比,所以最好先设置一个固定高度,父元素高度固定,让多余的元素可以以滚动条的方式显示出来

然后我们需要做的就是监听这个父元素的scroll事件

componentDidMount() {
        const node = this.refs.active;
        node.addEventListener('scroll',this.handleChange.bind(this));
}

通过ref可以很快找到这个dom元素,然后监听到这个元素,这里需要将监听写到dom渲染完后,然后记得在离开页面的时候应该将监听移除,避免影响性能。

然后判断他滚动到哪里,我选择的方法是在初始化的时候将子元素的在竖轴上的位置记录下来,然后在handleChange这个方法里,通过比较e.target.scrollTop这个数值与计录好的位置坐标一一比较来判断他已经滚到哪里了


然后至于左边的点击就很好实现了,每次点击时

 handleClick(item){
        let dom = this.refs.active;
        if( item === 0 ){
            dom.scrollTop = 0;
        }
        else{
            dom.scrollTop = arr[item-1];
        }
    }

在arr里保存了位置,根据item的值将父元素的滚动条设置到指定高度就ok了

在滚动时应该设置一个范围比如说 与俩个坐标之间减个200px,也就是说那个元素要快露出来的时候将它设置过去,这样就显得自然一点,不会太僵硬。
findIndex( targetHeight ){
        let i=0;
        for ( i = 0; i < arr.length - 1 ; i++) {
                if(target >= ( arr[i] - 200 ) && target <= arr[i+1] - 200){
                    return i+1;
                }
        }
        return 0;
    }

将高度传进去计算出一个大致的item值,ok,大致思想就是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值