Elementをクリックして、ボディキーまたは要素の閉じるをクリックしてMootoolsをクリックします。
-
14-11-2019 - |
質問
私はこのフィドルを作りました > http://jsfiddle.net/nab6n/10/
あなたが見ることができるように私は2つのアニメーター、要素とボディクラスを持っています、 要素を最初にクリックした後であるが、ボディをクリックした後にクラスにクラスを追加しています。アニメーターをとして定義した場合
var animators = $$('#opendiv,body');
.
WORK BOODICでDIVを開くことができないことを除いて、OKの動作。ボディクリックを閉じる必要があります。
任意の助けが高く評価されています。
ありがとうございました!
解決
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).