Javascript:水平自动滚动

Javascript:水平自动滚动,javascript,scroll,autoscroll,Javascript,Scroll,Autoscroll,如果用户正在将容器中的元素拖动到靠近水平边的位置,我需要将容器自动滚动到相应方向的末端 如何改进下面的代码 const scrollSpeed = 10; const scrollSensitivity = 10; let scrollInterval = null; const scrollContainer = document.getElementById("scrollContainer"); scrollContainer.addEventListener("touchmove",

如果用户正在将容器中的元素拖动到靠近水平边的位置,我需要将容器自动滚动到相应方向的末端

如何改进下面的代码

const scrollSpeed = 10;
const scrollSensitivity = 10;

let scrollInterval = null;

const scrollContainer = document.getElementById("scrollContainer");
scrollContainer.addEventListener("touchmove", autoScroll);

function disableAutoScrolling() {

    clearInterval(scrollInterval);
    scrollInterval = null;
}

function autoScroll(event) {

    // pointer offset
    const offsetX = event.targetTouches[0].pageX;
    const offsetY = event.targetTouches[0].pageY;

    // container offset relative to viewport
    const rect = scrollContainer.getBoundingClientRect();

    // pointer is over right / left edge of a scrollContainer
    const SCROLL_RIGHT = ( rect.width + rect.left - offsetX <= scrollSensitivity ) && ( offsetY > rect.top );
    const SCROLL_LEFT =  ( offsetX - rect.left <= scrollSensitivity ) && ( offsetY > rect.top );

    disableAutoScrolling();

    // the container should scroll
    if (SCROLL_RIGHT) {
        scrollInterval = setInterval(() => {
            scrollContainer.scrollLeft += scrollSpeed;
        }, 10);
    }

    if (SCROLL_LEFT) {
        scrollInterval = setInterval(() => {
            scrollContainer.scrollLeft -= scrollSpeed;
        }, 10);
    }
}
const scrollSpeed=10;
常数灵敏度=10;
设scrollInterval=null;
常量scrollContainer=document.getElementById(“scrollContainer”);
scrollContainer.addEventListener(“touchmove”,autoScroll);
函数disableAutoScrolling(){
清除间隔(滚动间隔);
scrollInterval=null;
}
函数自动滚动(事件){
//指针偏移量
const offsetX=event.targetTouches[0].pageX;
const offsetY=event.targetTouches[0].pageY;
//相对于视口的容器偏移
const rect=scrollContainer.getBoundingClientRect();
//指针位于滚动容器的右/左边缘上
const SCROLL_RIGHT=(rect.width+rect.left-offsetX rect.top);
常量SCROLL_LEFT=(offsetX-rect.LEFT rect.top);
禁用自动滚动();
//容器应该滚动
如果(向右滚动){
scrollInterval=setInterval(()=>{
scrollContainer.scrollLeft+=滚动速度;
}, 10);
}
如果(向左滚动){
scrollInterval=setInterval(()=>{
scrollContainer.scrollLeft-=滚动速度;
}, 10);
}
}

谢谢您的帮助。

我不知道当前的代码是否有效,但这里有一个更有条理的版本

const scroller={
    speed: 10,
    sensitivity: 10,
    container: document.getElementById("scrollContainer"),
    rect: scroller.container.getBoundingClientRect(),
    interval: null,
    offsetX: 0,
    offsetY: 0
};

scroller.container.addEventListener("touchmove",function(e){
    clearInterval(scroller.interval);
    scroller.interval = null; // May not be needed

    // pointer offset
    scroller.offsetX = e.targetTouches[0].pageX;
    scroller.offsetY = e.targetTouches[0].pageY;

    // the container should scroll
    // pointer is over right / left edge of a scroller.container
    if((scroller.rect.width+scroller.rect.left-scroller.offsetX<=scroller.sensitivity)&&(scroller.offsetY>scroller.rect.top))scroller.interval=setInterval(()=>{scroller.container.scrollLeft+=scroller.speed;},10);
    if((scroller.offsetX-scroller.rect.left<=scroller.sensitivity)&&(scroller.offsetY>scroller.rect.top))scroller.interval=setInterval(()=>{scroller.container.scrollLeft-=scroller.speed;},10);
});
const滚动条={
速度:10,,
敏感度:10,
容器:document.getElementById(“scrollContainer”),
rect:scroller.container.getBoundingClientRect(),
间隔:空,
抵销额:0,
副职:0
};
scroller.container.addEventListener(“触摸移动”,函数(e){
clearInterval(scroller.interval);
scroller.interval=null;//可能不需要
//指针偏移量
scroller.offsetX=e.targetTouches[0].pageX;
scroller.offsetY=e.targetTouches[0].pageY;
//容器应该滚动
//指针位于scroller.container的右/左边缘上
如果((scroller.rect.width+scroller.rect.left scroller.offsetXscroller.rect.top))scroller.interval=setInterval(()=>{scroller.container.scrollLeft+=scroller.speed;},10);
if((scroller.offsetX scroller.rect.leftscroller.rect.top))scroller.interval=setInterval(()=>{scroller.container.scrollLeft-=scroller.speed;},10);
});

您希望在这里改进什么?有什么问题吗?请说得更具体些。