Open div在元素单击,关闭正文或元素单击Mootools
-
14-11-2019 - |
题
我做了这个小提琴 http://jsfiddle.net/nab6n/10/
你可以看到我有2个动画函数,一个元素和身体类, 在第一次单击元素后,我向身体添加了类,但是一旦我点击身体就没有关闭它。如果我将动画ats定义为
var animators = $$('#opendiv,body');
.
它可以正常运行,除了我不希望div在正文上打开。我需要它关闭身体点击。
任何帮助都得到了赞赏。
谢谢!
解决方案
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).