Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MouseUp and DoubleClick both attached to seperate event handling functions using Backbone js

I have a chart application wherein I use Backbone.js to attach seperate handlers for mouseup and doubleclick events over different "area" of chart image.

I require mouseup to detect whether user clicked left button or right on the "area" part of chart image and depending on that I am redirecting my flow. Also I require doubleclick to enlarge or minimize my panel containing the chart image.

Here is the issue.. Since each doubleclick implicitly calls mouseup, I am getting my maximise/minimize functionality interfere with the left/right button click functions.

I tried using various techniques like timeout to check if single mouse up is followed by doubleclick (as suggested in following thread: Need to cancel click/mouseup events when double-click event detected

It did not work for me. Also I have different objects of the view containing the chart on same page so I am attaching unique ID with every event handler to differentiate them I also tried the simple flag set reset method to detect double click and prevent mouseup if double click occured but since in the event hierarchy the mouseup occurs before doubleclick, that failed too.

All in all, Please Help! Thanks in advance

like image 556
Vidhi Avatar asked Mar 22 '13 09:03

Vidhi


People also ask

Which button is pressed on the mouse to trigger the event?

The event object passed to the mouse event handler has a property called button that indicates which mouse button was pressed on the mouse to trigger the event. 0: the main mouse button pressed, usually the left button. 1: the auxiliary button pressed, usually the middle button or the wheel button.

What are the three mouse events when I click an element?

When you click an element, there are no less than three mouse events fire in the following sequence: The mousedown fires when you depress the mouse button on the element. The mouseup fires when you release the mouse button on the element. The click fires when one mousedown and one mouseup detected on the element.

How do you use mouseUp and mouseDown events?

If you depress the mouse button on an element and move your mouse off the element, and then release the mouse button. The only mousedown event fires on the element. Likewise, if you depress the mouse button, and move the mouse over the element, and release the mouse button, the only mouseup event fires on the element.

When does execute a JavaScript event occur when releasing a mouse button?

Execute a JavaScript when releasing a mouse button over a paragraph: More "Try it Yourself" examples below. The onmouseup event occurs when a user releases a mouse button over an element. Tip: The order of events related to the onmouseup event (for the left/middle mouse button):


1 Answers

Following the advice given in the answer you linked, you just have to debounce the callback for a mouseup and check if a second click occurs in a given period.

Assuming a view defined in this manner (http://jsfiddle.net/nikoshr/4KSZx/)

var V = Backbone.View.extend({
    events: {
        'mouseup button': 'onmouseup',
        'dblclick button': 'ondblclick'
    },

    onmouseup: function() {
        console.log('mouseup');
    },    
    ondblclick: function() {
        console.log('dblclick');
    }
});

you could modify it and "cancel" the mouseup event:

var V = Backbone.View.extend({
    events: {
        'mouseup button': _.debounce(function(e) {
            if (this.doucleckicked) {
                this.doucleckicked = false;
            } else {
                this.onmouseup.call(this, e);
            }
        }, 300),
        'dblclick button': function(e) {
            this.doucleckicked = true;
            this.ondblclick.call(this, e);
        }
    },

    onmouseup: function() {
        console.log('mouseup');
    },    
    ondblclick: function() {
        console.log('dblclick');
    }
});

And a demo http://jsfiddle.net/4KSZx/6/

like image 66
nikoshr Avatar answered Oct 20 '22 19:10

nikoshr