将延迟添加到“_on”mouseenter

时间:2015-05-22 15:09:27

标签: javascript jquery delay settimeout mouseenter

我想在下面显示的这个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))
}

非常感谢你的帮助!

2 个答案:

答案 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"));
      },
    });

  });
}