处理单击并拖动移动以使用mootools或jquery水平滚动

时间:2011-04-23 19:08:52

标签: jquery mootools click scroll drag

是否有一种简单的方法可以处理由div上的左侧或右侧单击和拖动组成的移动事件,以便执行经典滑块。
这个想法是做类似于滚动iphone应用程序的东西,但是点击鼠标左键。

3 个答案:

答案 0 :(得分:11)

你的意思是这样的?

var x,y,top,left,down;

$("#stuff").mousedown(function(e){
    e.preventDefault();
    down = true;
    x = e.pageX;
    y = e.pageY;
    top = $(this).scrollTop();
    left = $(this).scrollLeft();
});

$("body").mousemove(function(e){
    if(down){
        var newX = e.pageX;
        var newY = e.pageY;

        $("#stuff").scrollTop(top - newY + y);    
        $("#stuff").scrollLeft(left - newX + x);    
    }
});

$("body").mouseup(function(e){down = false;});

http://jsfiddle.net/AhC87/2/

在区域内单击并拖动以在div中移动。这很快又很脏,但如果这就是你的意思,那就是一个很好的起点。除非某个地方有现有的插件。

答案 1 :(得分:0)

答案 2 :(得分:0)

ES6版本/ https://stackoverflow.com/a/5839943/145122的Vanilla JS

let el = document.querySelector("#yourhtmlelement");
let x = 0, y = 0, top = 0, left = 0;

let draggingFunction = (e) => {
    document.addEventListener('mouseup', () => {
        document.removeEventListener("mousemove", draggingFunction);
    });

    el.scrollLeft = left - e.pageX + x;
    el.scrollTop = top - e.pageY + y;
};

el.addEventListener('mousedown', (e) => {
    e.preventDefault();

    y = e.pageY;
    x = e.pageX;
    top = el.scrollTop;
    left = el.scrollLeft;

    document.addEventListener('mousemove', draggingFunction);
});