js 滾動到指定位置帶動畫

效果1

請?zhí)砑訄D片描述
import {CaretUpOutlined,CaretDownOutlined} from "@ant-design/icons";

const wrap = useRef<HTMLDivElement | null>(null);

const scrollTo = useCallback(
  // dir:0 向下滾動  1 向上滾動
  (dom, height, dir = 0) =>
    () => {
      const sTop = dom.scrollTop;
      const valid = dir ? sTop > height : sTop < height;
      if (valid) {
        window.requestAnimationFrame(scrollTo(dom, height, dir));
        const diff = Math.abs(sTop - height);
        const dis = diff / 8;
        //差距不足 8 時滾動 4 2 1 0
        const nextScrollDis = dis < 1 ? Math.ceil(diff / 2) : dis;
        let y = sTop - nextScrollDis;
        // 向下滾動
        !dir && (y = sTop + nextScrollDis);
        dom.scrollTo(0, y);
      }
    },
  []
);

const onDownScroll = useCallback(() => {
  const { offsetHeight, scrollTop, scrollHeight } =
    wrap.current as HTMLDivElement;
  const maxHeight = scrollHeight - offsetHeight;
  const target = offsetHeight + scrollTop;
  scrollTo(wrap.current, target > maxHeight ? maxHeight : target)();
}, [scrollTo]);

const onUpScroll = useCallback(() => {
  const { offsetHeight, scrollTop } = wrap.current as HTMLDivElement;
  const target = scrollTop - offsetHeight;
  scrollTo(wrap.current, target < 0 ? 0 : target, 1)();
}, [scrollTo]);

return (
    <Container ref={wrap}>
      <TotalTitle>
        <span data-fill>
          TOTAL: <b>{pokerList.length}</b>
        </span>
        <CaretUpOutlined onClick={onUpScroll} />
        <CaretDownOutlined onClick={onDownScroll} />
      </TotalTitle>
      .....

效果 2

在這里插入圖片描述

思路
第一次 滾動100 的10分之一 里烦,一次時 100-10的十分之一耳标,下下次是 100-10-10的十分之一 依次類推
看起來就會一點點慢下來

//! 移動最小1 0.x不能移動
export const animateScrollToTop = (top: number, element: HTMLElement) => () => {
  const { scrollTop, scrollHeight, clientHeight } = element;

  if (clientHeight + scrollTop < scrollHeight) {
    const diff = top - scrollTop;
    // console.log(top, scrollTop, diff);
    const dis = diff / 6;
    // const scrollDis = dis < 1 ? 1 : dis;
    const scrollDis = dis < 1 ? Math.ceil(diff / 2) : dis;

    if (scrollTop < top) {
      requestAnimationFrame(animateScrollToTop(top, element));
      element.scrollTo(0, scrollTop + scrollDis);
    }
  }
};

滾動到最上方

export const scrollToTop = () => {
  let sTop = document.documentElement.scrollTop || document.body.scrollTop;
  if (sTop > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, sTop - sTop / 8);
  }
};
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末宏榕,一起剝皮案震驚了整個濱河市跨嘉,隨后出現的幾起案子跳夭,更是在濱河造成了極大的恐慌岸浑,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秫舌,死亡現場離奇詭異的妖,居然都是意外死亡,警方通過查閱死者的電腦和手機足陨,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門嫂粟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丁逝,“玉大人吟吝,你說我怎么就攤上這事√┭荩” “怎么了飒房?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵搁凸,是天一觀的道長。 經常有香客問我狠毯,道長护糖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任嚼松,我火速辦了婚禮嫡良,結果婚禮上,老公的妹妹穿的比我還像新娘献酗。我一直安慰自己寝受,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布罕偎。 她就那樣靜靜地躺著很澄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甩苛,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天蹂楣,我揣著相機與錄音,去河邊找鬼讯蒲。 笑死痊土,一個胖子當著我的面吹牛,可吹牛的內容都是我干的墨林。 我是一名探鬼主播赁酝,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旭等!你這毒婦竟也來了酌呆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辆雾,失蹤者是張志新(化名)和其女友劉穎肪笋,沒想到半個月后月劈,有當地人在樹林里發(fā)現了一具尸體度迂,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年猜揪,在試婚紗的時候發(fā)現自己被綠了惭墓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡而姐,死狀恐怖腊凶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拴念,我是刑警寧澤钧萍,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站政鼠,受9級特大地震影響风瘦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜公般,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一万搔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧官帘,春花似錦瞬雹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春胖缤,著一層夾襖步出監(jiān)牢的瞬間馅巷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工草姻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钓猬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓撩独,卻偏偏與公主長得像敞曹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子综膀,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容