JS 錨點定位滾動帶動畫,有如下的方式可以實現(xiàn):
// id 為選擇器寫法 如 '#xxx'
document.querySelector(id).scrollIntoView({ behavior: 'smooth' }); // 有兼容性問題
但是上面這種方式會有兼容性問題干跛,在某些瀏覽器上滾動的距離不一樣子姜,就會造成偏差,所以手動寫了一個:
/**
* 界面變速或勻速滾動楼入,只關(guān)注前四個參數(shù)哥捕,后面的參數(shù)為減少變量定義而存在
* @param {Number} initTop 當前瀏覽器的滾動的高度,可使用 document.documentElement.scrollTop 獲取
* @param {Number} offset 需要移動的距離
* @param {Number} down 是否是向下滾動是則為 1浅辙,向上為 -1
* @param {Bool} a 是否變速運動
* @param {Number} moved 總移動距離
* @param {Number} i 每次移動的距離扭弧,通過計算而來
* @param {Number} m 實際移動的距離阎姥,帶有方向记舆,正數(shù)為向下,負數(shù)為向上呼巴,為減少變量定義而存在泽腮,無需關(guān)注
*/
function anim(initTop, offset, down, a = false, moved = 0, i = 1, m = 0) {
setTimeout(() => {
i = a ? moved < offset - 128 ? i * 1.02 : i / 1.6 : 16;
i = i < 1 ? 1 : i;
i = i > 32 ? 32 : i;
moved += i;
m = i * down;
if (moved > offset) m = moved - offset;
document.documentElement.scrollTop = initTop + m;
if (moved < offset) {
anim(initTop + m, offset, down, a, moved, i);
}
}, 1);
}
使用方式:
在需要使用滾動并帶有動畫時御蒲,獲取到初始瀏覽器的滾動高度(第一個參數(shù),可使用document.documentElement.scrollTop
獲日锷蕖)厚满,然后把移動的距離(第二個參數(shù),可使用document.querySelector(id).offsetTop
獲取某錨點的高度)碧磅、方向(第三個參數(shù))和是否變速滾動(第四個參數(shù))傳入即可