我想在下面显示的这个mouseenter上添加一个延迟。任何人都可以用这种“_on”方法帮助我,请问?我尝试使用setTimeout,但它不起作用。
这是代码:
setTimeout(function() {
me._on($el, 'mouseenter', $.proxy(me.onListItemEnter, me, i, $el));
}, 1000);
我尝试了什么:
me._on($el, 'mouseenter', setTimeout(function() {
$.proxy(me.onListItemEnter, me, i, $el);
}, 1000);
和
import com.twitter.finatra.http.Controller
import play.api.libs.json.{Json, Writes}
trait MyController extends Controller {
def handle(request: AnyRef) =
response
.ok
.json(createJsonResponse(manage(request)))
.toFuture
def manage[T : Writes](request: AnyRef): T
// There should be an implicit Writes[T] in scope
def createJsonResponse[T : Writes](data: T) = Json.stringify(Json.toJson[T](data))
}
非常感谢你的帮助!
答案 0 :(得分:3)
您应该在匿名函数中包装处理程序并清除以前的任何超时:
me._on($el, 'mouseenter', function () {
clearTimeout($(this).data('timeout'));
$(this).data('timeout' , setTimeout(function () {
$.proxy(me.onListItemEnter, me, i, $el);
}, 1000));
});
也可以在mouseleave
清除超时。
答案 1 :(得分:1)
jQuery UI's code有一个使用小部件中的_on
设置多个事件的示例。这将允许您轻松删除mouseleave
上的超时,如A. Wolff建议的那样。
declareEvents: function() {
var me = this;
$.each(me._$listItems, function(i, el) {
var $el = $(el);
clearTimeout($el.data("hoverTimeout"));
me._on($el, {
mouseenter: function () {
$el.data("hoverTimeout", setTimeout($.proxy(me.onListItemEnter, me, i, $el)));
},
mouseleave: function () {
clearTimeout($el.data("hoverTimeout"));
},
});
});
}