首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Throlling/Debouncing无限滚动效果

Throlling/Debouncing无限滚动效果
EN

Stack Overflow用户
提问于 2020-07-02 23:41:37
回答 1查看 125关注 0票数 0

我有一个带有分页器的列表,当我试图添加一个效果时,你请求下一页/上一页,当前列表滚动到结束/开始。向后滚动工作正常,但向前滚动的页面通常会重复多次,因此我需要以某种方式限制/释放它。

代码语言:javascript
复制
                <div className={styles.property_container} ref={scrollContainerRef} onScroll={()=> {
                  if (scrollContainerRef.current.scrollTop + scrollContainerRef.current.clientHeight > scrollContainerRef.current.scrollHeight) {
                    console.log('move pager forward');
                    throttle(handlePageClick({selected: cur + 1}), 2000);
                  } else if (scrollContainerRef.current.scrollTop === 0 && cur > 0) {
                    console.log('move pager backward');
                    handlePageClick({selected: cur - 1});
                  }
                }} >
                  {pagedListings.map((property) => (
                    <Property
                      key={property.id}
                      id={property.id}
                      price={property.original_price}
                      imgUrl={property.medium_photo_url}
                      address={property.address}
                      permalink={property.permalink}
                      bedRooms={property.total_bedrooms}
                      bathRooms={property.total_full_baths}
                      acre={property.acre}
                      handleClick={handleClick}
                    />
                  ))}
                  {!pagedListings.length && (
                    <h2 className={styles.no_result}>No Result</h2>
                  )}
                </div>
                <ReactPaginate
                  previousLabel={previousSVG}
                  nextLabel={nextSVG}
                  breakLabel="..."
                  breakClassName="break-me"
                  pageCount={pageCount}
                  marginPagesDisplayed={1}
                  pageRangeDisplayed={4}
                  containerClassName="pagination"
                  subContainerClassName="pages pagination"
                  activeClassName="active"
                  initialPage={0}
                  onPageChange={handlePageClick}
                  forcePage={cur}
                />

我尝试了调节分页效果,在这个版本中,执行分页操作的是onScroll - handlePageClick()

当我限制/去抖动onScroll效果时,它就是不翻页。限制handlePageClick()不会做任何事情-它仍然会多次分页。

我应该在哪里/如何处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 00:19:40

以下是工作原理:

代码语言:javascript
复制
                  onScroll={() => {
                    const margin =
                      scrollContainerRef.current.clientHeight / 4;
                    if (
                      scrollContainerRef.current.scrollTop +
                        scrollContainerRef.current.clientHeight +
                        margin >
                        scrollContainerRef.current.scrollHeight &&
                      !wait
                    ) {
                      console.log("move pager forward");
                      setWait(true);
                      handlePageClick({ selected: cur + 1 });
                    } else if (
                      scrollContainerRef.current.scrollTop === 0 &&
                      cur > 0
                    ) {
                      console.log("move pager backward");
                      handlePageClick({ selected: cur - 1 });
                    }
                  }}

此版本包含定制的节流支持。不知何故,我尝试过的标准库并没有像所希望的那样运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62700120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档