jQuery UI, перетаскиваемый с помощью выборочной кнопки мыши (слева направо одновременно) на выборочных элементах - PullRequest
0 голосов
/ 28 сентября 2019

Я использую jQuery UI для перетаскивания элементов div.Есть div, он перетаскивается, когда я перетаскиваю левой кнопкой мыши.Я бы тоже хотел перетащить его правой кнопкой мыши.Поэтому я хочу, чтобы элемент перетаскивался левой и правой кнопками мыши.Но только этот элемент div, остальные элементы можно перетаскивать только левой кнопкой мыши.

Я изменяю js-файл jQuery UI, например:

$(document).ready(function () {
//override jQuery UI draggable
$.extend($.ui.draggable.prototype, {

    _mouseDown: function (event) {

        // we may have missed mouseup (out of window)
        (this._mouseStarted && this._mouseUp(event));

        this._mouseDownEvent = event;

        var that = this,
        btnIsLeft = (event.type === 'mousedown'),

            // event.target.nodeName works around a bug in IE 8 with
            // disabled inputs (#7620)
            elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
        if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
            return true;
        }

        this.mouseDelayMet = !this.options.delay;
        if (!this.mouseDelayMet) {
            this._mouseDelayTimer = setTimeout(function () {
                that.mouseDelayMet = true;
            }, this.options.delay);
        }

        if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
            this._mouseStarted = (this._mouseStart(event) !== false);
            if (!this._mouseStarted) {
                event.preventDefault();
                return true;
            }
        }

        // Click event may never have fired (Gecko & Opera)
        if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
            $.removeData(event.target, this.widgetName + ".preventClickEvent");
        }

        // these delegates are required to keep context
        this._mouseMoveDelegate = function (event) {
            return that._mouseMove(event);
        };
        this._mouseUpDelegate = function (event) {
            return that._mouseUp(event);
        };
        $(document)
            .bind("mousemove." + this.widgetName, this._mouseMoveDelegate)
            .bind("mouseup." + this.widgetName, this._mouseUpDelegate);

        event.preventDefault();

        mouseHandled = true;
        return true;
    }
  });
});

Изменение здесь: btnIsLeft = (event.type === 'mousedown'),

С этим кодом мой конкретный элемент div работает нормально, он также работает с левой и правой кнопками мыши, но другие элементы можно перетаскиватьс обеими кнопками мыши, что я не хочу.

Мой элемент div - это (я хотел бы применить только это с правой и левой перетаскиваемой функцией):

$('.mydiv_with_right_and_left_drag').draggable({
    scroll: false,
    delay: 0,
    distance: 0,                                        
    cursor: 'hand',                                     
    snap: false,                                        
    cursor: 'pointer',
    stack: '.mydiv_with_right_and_left_drag',
    containment: 'parent',                              
    opacity: 0.35,                                                                                                                  
});

JSFIDDLE SOURCE

Это может быть как-то работоспособным?Спасибо.

...