jQuery - mouseleave上的setInterval和mouseenter上的clearInterval

时间:2012-10-08 08:42:36

标签: jquery function setinterval mouseleave clearinterval

我正在尝试动态地向DIVS添加一些CONTAINER(带动态添加功能的 )。当我点击这些DIVs的某人时,MENU会插入此DIV。 在mouseleave我需要从MENU移除DIVdelaysetInterval约5秒。它有效,但很混乱...所以我需要:

  1. mouseleave离开此DIV然后立即放入鼠标时 回到此DIV,我需要停止delaysetInterval。我需要停下来 删除MENU

  2. 函数'handler'存在一些问题。当我添加时,贝塞尔 一些DIVCONTAINER,这是我第一次需要使用 doubleclik,调用此函数。但我需要使用简单的点击。

  3. 以下是一个例子: http://jsfiddle.net/ynternet/84nVQ/5/

    HTML

    <div id="add" style="background:yellow; width:100px;"> add new </div>
    <div id="container"> </div>
    <div id="menu" style="color:red;"><b> I'm here </b></div>
    

    的jQuery

    function handler() {
        $(this).on({
            click: function(e) {
                clearTimeout(time);
                if ($(this).find("#menu").length) {
                    return;
                }
                $('#menu').prependTo($(this));
                $("#menu").css({
                    position: "absolute",
                    left: "100px"
                }).show();
            }
        });
        $(this).on({
            mouseleave: function(e) {
                time = setTimeout(function() {
                    $('#menu').appendTo('body').clearTimeout(time);;
                }, 5000);
            }
        });
        $(this).on({
            mouseover: function(e) {
                clearTimeout(time);
            }
        });
    }
    
    $("#add").on({
        click: function(e) {
           var timestamp = Date.now();
           var posx = Math.floor(Math.random()*400);
           var posy = Math.floor(Math.random()*400);
           $('#container').append(function() {
            return $('<div class="add_to_this" id="' + timestamp + '" style="left:'+posx+'px; top:'+posy+'px; ">Click here</div>').click(handler);
           });
        }
    });
    

    CSS

    #container {
        width:500px;
        height:500px;
        background: palegoldenrod;
        position: relative;
        top:20px;
        left: 100px;
        padding: 0px;
    }
    .add_to_this {
        background:yellowgreen;
        position: absolute;
        display:inline-block;
        width:200px;
        height:30px;
        -moz-user-select: none;
        -khtml-user-select: none;
        -webkit-user-select: none;
        user-select: none;
        -o-user-select: none;
    }
    

2 个答案:

答案 0 :(得分:3)

function handler() {
    $(this).on({...

什么是$(this)

您没有使用或传递任何选择器

使用$("#container").on

答案 1 :(得分:0)

这是解决方案:

JsFiddle - 工作示例:http://jsfiddle.net/ynternet/84nVQ/6/

的jQuery

function handler1() {
    clearTimeout(time);
    if ($(this).find("#menu").length) {
        return;
    }
    $('#menu').prependTo($(this));
    $("#menu").css({
        position: "absolute",
        left: "100px"
    }).show();
}

function handler2() {
    time = setTimeout(function() {
        $('#menu').appendTo('body').clearTimeout(time);;
    }, 5000);
}

function handler3() {
    clearTimeout(time);
}


$("#add").on({
    click: function(e) {
        var timestamp = Date.now();
        var posx = Math.floor(Math.random() * 400);
        var posy = Math.floor(Math.random() * 400);
        $('#container').append(function() {
            return $('<div class="add_to_this" id="' + timestamp + '" style="left:' + posx + 'px; top:' + posy + 'px; ">Click here</div>').click(handler1).mouseleave(handler2).mouseenter(handler3);
        });
    }
});