Создание дублирующих элементов в случайных позициях

0

Поскольку мой предыдущий вопрос, расположенный здесь, технически неосуществим на данный момент (html2canvas не будет правильно отображать мои элементы, поскольку он принимает только "моментальные снимки"), я придерживаюсь другого подхода.

По сути, когда объект щелкнут, я хочу, чтобы он исчез, а затем несколько меньших его версий разбросаны по экрану в случайном порядке. Итак, для простоты возьмите изображение кота (cat.jpg): при нажатии на него должно показаться, что он взрывается на три небольших изображения cat.jpg, которые бросаются вокруг экрана. Между тем, оригинальный cat.jpg затем скрыт.

Мой (теперь полностью функциональный) код:

  $('#cat').click(function() {
    $(this).hide();
    for (var j = 1; j <= 3; j++) {
      $('#content').append('<span><img class="cat" src="cat.jpg" /></span>');
    }
    $('#cat').css("position", "relative");
    $('img.cat').each(function(i) {
      var newTop = Math.floor(Math.random()*500)*((i%2)?1:-1);
      var newLeft = Math.floor(Math.random()*500)*((i%2)?1:-1);
      $(this).css({position: "relative",
        top: 0,
        left: 0
      }).animate({
        top: newTop,
        left:newLeft
      }, 1000);
    });
  });

Я знаю, что в настоящее время они не уменьшают их размер, но если я получу дублирование + произвольное позиционирование, я могу просто сделать их размер фактором текущего цикла. Во всяком случае, он работает на полу, но есть ли лучшее или более элегантное решение для этого?

Изменение: я обновил свой код версией, которая фактически работает почти точно, как мне хотелось бы, но я все еще ищу предложения и улучшения любого вида. Я дам ответ всем, кто показывает мне лучший метод.

  • 0
    Я ложусь спать, но это похоже на проблему с закрытием. Я знаю, что это не поможет вам, но может помочь читателю будущего, который ответит вам правильно.
  • 0
    Вы правы, код был грязным, но я решил проблему с закрытием. Теперь проблема в том, что цикл .each не выполняется асинхронно или что-то в этом роде и перемещает последний файл cat.jpg три раза, а не один раз. Спасибо за помощь, хотя!

1 ответ

2
Лучший ответ

попробуйте:

// $(document).ready(function(){ - i'm omitting this i suppose you know where to put the code.

var contW = $('#container').width();
var contH = $('#container').height();
var explode;

$('.holder').click(explode=function() {    
    for (var j = 1; j <= 3; j++){        
       var sourceX = (Math.random()*contW)%(contW>>1);
       var sourceY = (Math.random()*contH)%(contH>>1);
       var nTop = Math.floor((Math.random()*contW)%contW);
       var nLeft = Math.floor(((Math.random()*contH)%contH));
       var $child = $(this).clone();       

       $('#container').append($child);
       $child.css({ top:sourceX, left: sourceY })
           .animate({ top: nTop+'px', left:nLeft+'px' }, 200)
           .click(explode);
    }

    $(this).hide();
});

HTML небольшой мод:

<div id="container" style="width:400px; height:500px; background-color:yellow;">
    <div class="holder style="absolute; "><img class="cat" 
        src="http://jsfiddle.net/img/logo.png" 
        style="background-color:blue;" />
    </div>
</div>

Ссылка JSFidle здесь: http://jsfiddle.net/58YWM/8/

Дайте мне знать, если это Скалы!

С уважением.

  • 0
    Не удалось заставить его работать, но я думаю, что вы все еще обновляете его? В любом случае, действительно ценю усилия.
  • 0
    Я работаю здесь над JSFidle для вас;)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню