惯性垂直拖动滚动
我通过用鼠标向上/向下拖动来在我的网页上工作来实现垂直滚动。然而,问题是它感觉很突然,因为当你停止拖动时滚动会立即停止。我想添加一些惯性,以便在停止拖动后它会继续滚动一段时间,直到停止。
这实施起来有点复杂,所以我需要一些帮助。这是我当前的所有代码:
let newScrollY = 0
let element = null
const dragScroll = (enabled) => {
element?.removeEventListener("mousedown", element?.mouseDownFunc, false)
window.removeEventListener("mouseup", element?.mouseUpFunc, false)
window.removeEventListener("mousemove", element?.mouseMoveFunc, false)
element = document.querySelector(".drag")
if (!element || !enabled) return
let lastClientY = 0
let mouseDown = false
element.addEventListener("mousedown", element.mouseDownFunc = (event) => {
event.preventDefault()
mouseDown = true
lastClientY = event.clientY
}, false)
window.addEventListener("mouseup", element.mouseUpFunc = (event) => {
mouseDown = false
}, false)
window.addEventListener("mousemove", element.mouseMoveFunc = (event) => {
if (!mouseDown) return
let scrollElement = element
if (element == document.body) scrollElement = document.documentElement
newScrollY = event.clientY - lastClientY
lastClientY = event.clientY
scrollElement.scrollTop -= newScrollY
}, false)
}
I have gotten vertical scrolling by dragging up/down with the mouse to work on my webpage. However, the problem is that it feels pretty abrupt because the scrolling stops instantly when you stop dragging. I would like to add some inertia so that it continues to scroll for a bit after you stop dragging until it comes to a stop.
This is somewhat complicated to implement so I would like some help. This is my all of my current code:
let newScrollY = 0
let element = null
const dragScroll = (enabled) => {
element?.removeEventListener("mousedown", element?.mouseDownFunc, false)
window.removeEventListener("mouseup", element?.mouseUpFunc, false)
window.removeEventListener("mousemove", element?.mouseMoveFunc, false)
element = document.querySelector(".drag")
if (!element || !enabled) return
let lastClientY = 0
let mouseDown = false
element.addEventListener("mousedown", element.mouseDownFunc = (event) => {
event.preventDefault()
mouseDown = true
lastClientY = event.clientY
}, false)
window.addEventListener("mouseup", element.mouseUpFunc = (event) => {
mouseDown = false
}, false)
window.addEventListener("mousemove", element.mouseMoveFunc = (event) => {
if (!mouseDown) return
let scrollElement = element
if (element == document.body) scrollElement = document.documentElement
newScrollY = event.clientY - lastClientY
lastClientY = event.clientY
scrollElement.scrollTop -= newScrollY
}, false)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已经想出了一个解决办法。关键是使用速度的绝对值,并根据速度的符号(指示它们是向上还是向下滚动)对scrollTop 进行加/减。
I have figured out a solution. The key was to use the absolute value of the speed and either add/subtract to the scrollTop depending on the sign of the speed (indicating whether they were scrolling up or down).