iT邦幫忙

0

ReactJS window.scrollTo() 第二次點擊偏移問題

  • 分享至 

  • xImage

小弟工作正在做一個線上點餐網站,網頁中有一個 fixed NavBar,它是手工製作的 NavBar,而不是 sticky NavBar(因為父元素有用到 overflow: hidden 這個樣式)

我想點擊 navbar 上的按鈕來觸發 scrollTo 功能,就像這個 gif:

https://i.stack.imgur.com/WgQgt.gif

Code:

Change_nav_bar_active(category_sid) {
    let abc = document.getElementById(category_sid).offsetTop;
    window.scrollTo({ top: abc - 200, behavior: 'smooth' });
}
product_menu = () => {
    return (
        <ul className="product-menu-category scroll-x" id="Product_Category_Area" style={mystyle}>
          {
            product_data.map((product_column, index) => {
              return product_column.data.map((product_block, index2) => {
                if(index == 0 && index2 == 0) {
                  return <li className="active" id={product_block.category_code}><a className="nav-link" onClick={() => {this.Change_nav_bar_active(product_block.category_sid)}}>{product_block.category_name}</a></li>
                }else {
                  return <li id={product_block.category_code}><a className="nav-link" onClick={() => {this.Change_nav_bar_active(product_block.category_sid)}}>{product_block.category_name}</a></li>
                }
              })
            })
          }
        </ul>
    )
}
if (this.state.超過200) {
      mystyle = {
        "position": "fixed",
        "top": "48px",
        "zIndex": "80",
        "marginTop": "unset",
        "width": document.getElementsByClassName('product-menu-category')[0].offsetWidth
      };
    }else {
      mystyle = {
        "position": "unset",
        "top": "unset",
        "zIndex": "unset",
      };
    }

我使用 onClick={() => {this.Change_nav_bar_active(product_block.category_sid)}} 來觸發它

但它只會在我第一次點擊時滾到正確的位置,如果我第二次點擊相同的類別,它會出現一點點偏移的狀況,但是在第二次之後的點擊,scrollTo 不會做任何事情

我想知道是因為我把 navbar 設定了 fixed 的關係,導致它在滾動的時候會被 navbar 吃掉,第二次才是它最正確的位置嗎?

謝謝各位大神指點

請問有CSS可看嗎?
已補上,超過200是我自己定義當畫面滾動的Y軸>200時會觸發法navbar定住
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
前端野人
iT邦新手 3 級 ‧ 2022-07-28 14:48:56

如果是要操作到DOM的話,基本上都是用 useRef操作,你應該有兩個行為
1.點擊tabs 滾軸到相對應的區塊
2.監聽滾軸位置超過 200px 修改 navbar的樣式讓他 fixed

DEMO

看更多先前的回應...收起先前的回應...

大神不好意思,沒有看到畫面耶!

剛剛在除錯 你再看看

因為我的div是動態產出的,沒辦法直接給定好ref的值,而且我的網一很大,它使用了很多父元素跟子元素去渲染

ref 也是可以動態產生,你參考看看

我要發表回答

立即登入回答