Drag with mootools on mobile

后端 未结 3 1221
一生所求
一生所求 2021-01-05 04:00

Is there a way to make to work the mootools class \"Drag\" on Safari mobile? Please don\'t link me to other frameworks.

相关标签:
3条回答
  • 2021-01-05 04:32

    Here was my solution to making Mootools Drag support touch events. This method didn't require me to edit the mootools more file since i used Class.refactor (This is only tested with Mootools v.1.3.1) -- it also does not break the usual click events

    Class.refactor(Drag,
        {
            attach: function(){
                this.handles.addEvent('touchstart', this.bound.start);
                return this.previous.apply(this, arguments);
            },
    
            detach: function(){
                this.handles.removeEvent('touchstart', this.bound.start);
                return this.previous.apply(this, arguments);
            },
    
            start: function(event){
                document.body.addEvents({
                    touchmove: this.bound.check,
                    touchend: this.bound.cancel
                });
                this.previous.apply(this, arguments);
            },
    
            check: function(event){
                if (this.options.preventDefault) event.preventDefault();
                var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2)));
                if (distance > this.options.snap){
                    this.cancel();
                    this.document.addEvents({
                        mousemove: this.bound.drag,
                        mouseup: this.bound.stop
                    });
                    document.body.addEvents({
                        touchmove: this.bound.drag,
                        touchend: this.bound.stop
                    });
                    this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element);
                }
            },
    
            cancel: function(event){
                document.body.removeEvents({
                    touchmove: this.bound.check,
                    touchend: this.bound.cancel
                });
                return this.previous.apply(this, arguments);
            },
    
            stop: function(event){
                document.body.removeEvents({
                    touchmove: this.bound.drag,
                    touchend: this.bound.stop
                });
                return this.previous.apply(this, arguments);
            }
        });
    
    0 讨论(0)
  • 2021-01-05 04:47

    I've fixed it myself. It is as easy as maping the mouse events to touch events.

    So the solution is to search & replace:

    mousedown -> touchstart
    mouseup -> touchend
    mousemove -> touchmove
    
    0 讨论(0)
  • 2021-01-05 04:48

    Could you try https://github.com/kamicane/mootools-touch ?

    0 讨论(0)
提交回复
热议问题