这是一个两部分的问题。
第1部分
具有元素原型的类实例的特殊访问器可用于 mootools 类,如 fx.tween/morph 以及请求、验证器等。
el.set('tween', {
duration: 500
}).tween(something);
如果没有找到,set 将创建一个 Fx.Tween 实例 - 或者setOptions()
将您的新选项添加到现有实例中。
同样适用于.get
只有它可以返回实际的 Fx.something 实例:
var instance = el.get('morph', { duration: 600 });
instance.start({marginBottom:[0,-280]});
在这里查看自定义设置/获取的真正作用:https ://github.com/mootools/mootools-core/blob/master/Source/Fx/Fx.Tween.js#L45-61
对于与作为模式的单个 dom 元素相关的类非常有用。
第2部分
添加延迟将很简单。
mouseleave: function() {
clearTimeout(this.retrieve('handle')); // reset.
this.store('handle' (function() {
el1.tween(); ....
}).delay(3000));
}
如果他们离开并在 3 秒内回来,它将重置计时器。
用你的小提琴整理例子:
$$('.info').each(function(el) {
el.set('morph', {
duration: 300,
'link': 'cancel'
}).addEvents({
mouseenter: function() {
clearTimeout(this.retrieve('handle'));
this.morph({
'margin-left': 70
});
},
mouseleave: function() {
this.store('handle', (function() {
this.morph({
marginLeft: 0
});
}).delay(500, this));
}
});
});
如果您希望设置中的代码更少,您可以使用我为 hoverIntent 编写的延迟伪钩子之类的东西 - 但也适用于任何延迟事件,真的:http:
//jsfiddle.net/dimitar/xAJ5f/
然后你可以这样做:mouseleave:delay(500): function() {}