1

我最近改变了我的拖放游戏,以使年轻用户更容易。

基本上,您现在单击字母而不是拖放字母来拼写单词,它会自动动画到正确的区域。

我的问题是当我有拖放功能时,字母会克隆,这样你就可以在游戏中多次使用每个字母。现在他们没有。

在拖放事件之外有不同的方法吗?

$('.drag').on('click', function(e) {
e.preventDefault();

var target     = $('.drop-box.spellword:not(.occupied):first');
var targetPos  = target.position();
var currentPos = $(this).offset();
var b = $(this);

if(target.length) {


    if(b.attr("data-letter") == target.attr("data-letter")){
        $(this).addClass('wordglow3').css('color', 'white');
            $('.minibutton').prop('disabled', true);
        } else {
            $(this).addClass('wordglow');
            $('.minibutton').prop('disabled', true);
    }


        b.remove().appendTo('table').css({
        'position' : 'absolute',
        'top' : currentPos.top,
        'left': currentPos.left
        });
        {
        b.animate({
           top  : targetPos.top,
            left : targetPos.left
        }, 'slow', function() {
            b.remove().css({ top: 0, left: 0 }).appendTo(target);
            target.addClass('occupied');
        });
      }
   }
});  

这是我在拖放功能中使用的...

    $('.drag').draggable({
    helper: 'clone'
});
4

2 回答 2

1

您可以clone()元素和animate()克隆:

if (target.length) {
    $(".minibutton").prop("disabled", true);
    b.clone().addClass(
        b.data("letter") == target.data("letter") ? "wordglow3" : "wordglow"
    ).appendTo("table").css({
        background: "transparent",
        position: "absolute",
        top: currentPos.top,
        left: currentPos.left
    }).animate({
        top: targetPos.top,
        left: targetPos.left
    }, "slow", function() {
        $(this).css({
            top: 0,
            left: 0
        }).appendTo(target);
        target.addClass("occupied");
    });
}

(附带说明,您不必调用remove()before appendTo(),因为如果元素已经有父元素,它将被移动。)

于 2012-08-16T08:44:47.327 回答
0

您可以使用以下命令手动克隆您的元素:

$(e.target).clone().after(e.target);

于 2012-08-16T08:42:01.960 回答