【问题标题】:Using appendTo to make a div change parents使用 appendTo 进行 div 更改父母
【发布时间】:2016-04-25 00:21:32
【问题描述】:

所以我决定学习 JS 和 jQuery 编程的最佳方式是尝试构建我喜欢的东西。所以我决定使用最少的 HTML 和主要是 JS 和 Jquery 制作自己的棋盘。

下面的代码呈现一个板并在图块的起始位置插入图像。

$(document).ready(function(){
    //draw the chess board
    var amount = 0;
    var columnColor = "Black";
    while(amount < 64){
        if(amount % 9 === 0){
            amount++
        }
        else if (amount < 18){
            $(".mainWrapper").append('<div class="block'+columnColor+'"><img class="pawn" src="images/whitePawn.png" alt="White Pawn" height="42" width="42"></div>')
            amount++
        }
        else if (amount > 45){
            $(".mainWrapper").append('<div class="block'+columnColor+'"><img class="pawn" src="images/blackPawn.png" alt="White Pawn" height="42" width="42"></div>')
            amount++
        }
        else{
            $(".mainWrapper").append('<div class="block'+columnColor+'"></div>')
            amount++
        }
        switch (columnColor){
            case "White": 
                columnColor = "Black";
                break;
            case "Black":
                columnColor = "White";
                break;
        }
    };
});

console.log("I ran! :D");

我的下一步是让碎片能够移动。现在起初我想我会通过使用 jQuery 的.draggable 方法来做到这一点。哪个有效(有点)但没有做我想要的,因为它不会以干净的方式移动它们(碎片可以与正方形重叠)并且它不限制用户可以移动的正方形数量。

所以稍后快速谷歌搜索,我在 Stackoverflow 上找到了 THIS 帖子。他们在那里描述了一种使用 appendTo 将项目移动到另一个父 div 的方法。对于我的情况,这将是完美的(至少我认为)。

虽然由于我对 JS 的理解仍然有限,但我无法弄清楚如何做到这一点。

我知道您需要某种选择器类来选择图像。然后需要有一个click 事件将所选图像移动到您单击的div。

只是为了您的娱乐,我无法超越THIS。

感谢任何帮助或提示!

【问题讨论】:

  • 您可以使用 .click 或 .draggable
  • 我明白了,虽然我也不知道怎么用。我目前正在查看 .mouseup 来实现我想要的效果。您能否给我更多信息@Yaron?

标签: javascript jquery appendto


【解决方案1】:

您可以将一个字段上的 mousedown 与相邻字段上的 mouseup 组合起来:

Demo

var piece;

$('div').mousedown(function(e) {

    e.preventDefault();
    piece = $(this).find('img');
})
.mouseup(function() {

    $(this).append(piece); // same as piece.appendTo(this);     
});

当然,距离没有限制,它不适用于整个领域(如果有图像)。

我添加了一个preventDefault(),因此没有选择使拖动变得复杂的元素。

为了包含这些片段,您可能必须使用字段的坐标以实现直接的方法。为此,您可能需要查看 e.clientX 和 getBoundingClientRect。

【讨论】:

  • 太棒了,确实有效。如果您向所有字段添加包装器,有没有办法让它工作? codepen.io/anon/pen/rxYXxo
  • 当然,那么在演示中,您可以不使用像 $('div') 这样的任何 div 的通用选择器,而是通过定位它们的公共类来使其特定于也是国际象棋字段的 div。在这种情况下,这只是一个额外的点:$('.div') - example。
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多