scrollToX【水平滚动到某个具体位置】 🔥
描述
水平滚动到某个具体位置,支持回调函数/设置滚动时长
# 1.示例
复制代码
# 2.入参说明
| 参数 | 说明 | 类型 | 是否必填 | 默认值 |
|---|---|---|---|---|
| el | 滚动的 dom 元素 | HTMLElement | - | - |
| start | 起始位置 默认是 scrollTop | Number | - | - |
| to | 滑动末端位置 | Number | - | - |
| duration | 滚动持续时间 | Number | - | 500ms |
| callback | 结束回调事件 | Function | - | - |
# 3.源码
源码,点开查看 👈
import getScrollLeft from './getScrollLeft'
import isFunction from '@/base/isFunction'
import { _easeInOutQuad, _requestAnimationFrame } from './_constant'
/**
* 水平滚动
* @param {HTMLElement} el 滚动的dom
* @param {number} start 起始位置 默认是 scrollLeft
* @param {number} to 滑动末端位置
* @param {number} duration 滚动持续时间
* @param {Function} callback 结束回调事件
*/
function scrollToX(el, start = 0, to, duration = 500, callback) {
function elMoveX(el, scrollLeft = 0) {
if (el) {
el.scrollLeft = scrollLeft
} else {
document.documentElement.scrollLeft = scrollLeft
document.body.parentNode.scrollLeft = scrollLeft
document.body.scrollLeft = scrollLeft
}
}
function scrollToXfn(el, start = 0, to, duration = 500, callback) {
start = getScrollLeft(el) || 0
const change = to - start
const increment = 20
let currentTime = 0
duration = typeof duration === 'undefined' ? 500 : duration
let _animateScroll = () => {
currentTime += increment
let val = _easeInOutQuad(currentTime, start, change, duration)
elMoveX(el, val)
if (currentTime < duration) {
_requestAnimationFrame(_animateScroll)
} else {
if (callback && isFunction(callback)) {
callback()
}
}
}
_animateScroll()
}
scrollToXfn(el, start, to, duration, callback)
}
export default scrollToX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
上次更新: 2025/07/01, 14:52:29