OUVERT DIV ON ELEMENT CLIQUE, FERMER SUR LE CORPS OU ÉLÉMENT CLIQUEZ CLIQUEZ MOTOOLTOOLS

StackOverflow https://stackoverflow.com/questions/9506262

  •  14-11-2019
  •  | 
  •  

Question

J'ai fait ce violon http://jsfiddle.net/nab6n/10/

Comme vous pouvez le voir, j'ai 2 animateurs, un élément et une classe de carrosserie, Je ajoute une classe au corps après le premier clic sur un élément mais une fois que je clique sur le corps ne ferme pas.Si je définis des animateurs comme

 var animators = $$('#opendiv,body');

Cela fonctionne bien, sauf que je ne veux pas que la div puisse ouvrir sur le corps.J'en ai besoin de fermer sur le corps.

Toute aide est appréciée.

Merci!

Était-ce utile?

La solution

Right. Seems as if you really require an outerClick pattern to close. Here's the one that is most notably used within mootools devs, allowing you to create a custom event, based on click:

Element.Events.outerClick = {
    base : 'click',
    condition : function(event){
        event.stopPropagation();
        return false;
    },
    onAdd : function(fn){
        this.getDocument().addEvent('click', fn);
    },
    onRemove : function(fn){
        this.getDocument().removeEvent('click', fn);
    }
};

The way it works is: it is based on a normal click. upon adding, it adds the callback as a click event on the document. when a click happens within the element itself,it stops bubbling via event.stopPropagation();, else, it will bubble and the callback will run.

here's how it ties together after the above:

http://jsfiddle.net/dimitar/nAb6N/13/

(function() {
    var opener = $('opendiv');
    var boxtoopen = $('box');

    boxtoopen.set('morph', {
        duration: 700,
        transition: 'bounce:out'
    });

    boxtoopen.addEvent('outerClick', function(event) {
        boxtoopen.morph(".openOff");
        opener.removeClass("hide");
    });

    opener.addEvent('click', function(e) {
        e.stop();
        boxtoopen.morph(".openOn");    
        this.addClass("hide");
    });

})();

I have also 'outsourced' the morph properties to the CSS as it makes more sense, semantically.

P.S. note that you need mootools 1.4.3 or 1.4.5, but not 1.4.4 as there's a morph bug to do with units in that release. the jsfiddle above uses 1.4.6 (mootools edge).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top