div的随机位置和悬停功能

时间:2012-12-11 10:00:38

标签: javascript jquery random hover

我发现这段代码随机创建了一些div:

(function makeDiv(){
   var divsize = ((Math.random()*100) + 50).toFixed();
   var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
   $newdiv = $('<div/>').addClass("destruct").css({
       'width':divsize+'px',
       'height':divsize+'px',
       'background-color': color
   });

   var posx = (Math.random() * ($(document).width() - divsize)).toFixed();
   var posy = (Math.random() * ($(document).height() - divsize)).toFixed();

   $newdiv.css({
       'position':'absolute',
       'left':posx+'px',
       'top':posy+'px',
       'display':'none'
   }).appendTo( 'body' ).fadeIn(500, function(){
      makeDiv(); 
   }); 
})();

但是我希望div一个接一个地转动为黑色。

$(document).ready(function() {
  $('.destruct').hover( function(){
    $('.destruct', this).css({background: '#000'});
   });
});

但它不起作用......

这是http://jsfiddle.net/q6L7C/2/

3 个答案:

答案 0 :(得分:4)

Demo

因为你的div是动态生成的,请尝试:

$(document).ready(function() {
   $(document).on('mouseover', '.destruct', function(){
      $(this).css({background: '#000'});
   });
});

如果您使用旧版本的jquery,(&gt; 1.7),请使用:

$(".destruct").live("mouseover", function(){
    $(this).css({background: '#000'});
}); 

答案 1 :(得分:1)

有几种方法可以做到这一点。一个是事件授权:

http://jsfiddle.net/q6L7C/3/

这会将绑定更改为:

$(document).on('hover', '.destruct', function(){
   $(this).css({background: '#000'});
});

...但我会尝试使用比document更具体的选择器。

另一个解决方案是绑定hover(或者在这种情况下为mouseover,因为它应该足够了)在创建时单独回调每个div,但这可能导致很多单独的事件绑定。

答案 2 :(得分:1)

您可以在创建div时绑定.mouseenter(),也可以将.mouseenter()绑定到文档(事件委派),如其他答案所指出的那样。我将采用第一种方法。 Updated demo

(function makeDiv(){
    var divsize = ((Math.random()*100) + 50).toFixed();
    var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
    $newdiv = $('<div/>').addClass("destruct").css({
        'width':divsize+'px',
        'height':divsize+'px',
        'background-color': color
    })
    // Magic happens here!
    .mouseenter(function(){
      $(this).css({background: '#000'});
    });

    var posx = (Math.random() * ($(document).width() - divsize)).toFixed();
    var posy = (Math.random() * ($(document).height() - divsize)).toFixed();

    $newdiv.css({
        'position':'absolute',
        'left':posx+'px',
        'top':posy+'px',
        'display':'none'
    }).appendTo( 'body' ).fadeIn(500, function(){
       makeDiv();
    });
})();