0

jQuery-ui-sortableを使用して、ユーザーがカードの手札をカスタムソートできるようにしようとしています。私が並べ替えを許可しようとしているHTMLには、絶対的に配置され、余白が残っているスタイルがあり、重複しているdiv要素があります。

私の問題は、コンテナ要素を並べ替え可能にすると、個々のカードをクリックしてドラッグできるのに、マウスボタンを離すと、カードが元の位置にスナップバックすることです。

ユーザーの手はアレイに支えられているので、カードを新しい位置に実際にドロップするためにソート可能である必要はありませんが、持っていると便利なので、手を再描画する必要はありません。必要なのは、マウスボタンを離したときにヘルパー/プレースホルダーがホバーしているインデックスを取得することだけです。これを取得するさまざまな方法も試しましたが、コンソールで初期インデックス+1を取得しています。

これが私のコードのフィドルです:http: //jsfiddle.net/rcMwq/4/

HTML:

<div class="bottomhand ui-sortable">
    <div class="mycard" style="margin-left: 0em">
        <div class="card">
            <div class="front">
                <div class="index">3
                    <br>♠&lt;/div>
                <div class="spotB1">♠&lt;/div>
                <div class="spotB3">♠&lt;/div>
                <div class="spotB5">♠&lt;/div>
                <div class="bottomindex">3
                    <br>♠&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 1.5em">
        <div class="card">
            <div class="front red">
                <div class="index">4
                    <br>♦&lt;/div>
                <div class="spotA1">♦&lt;/div>
                <div class="spotA5">♦&lt;/div>
                <div class="spotC1">♦&lt;/div>
                <div class="spotC5">♦&lt;/div>
                <div class="bottomindex">4
                    <br>♦&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 3em">
        <div class="card">
            <div class="front red">
                <div class="index">7
                    <br>♥&lt;/div>
                <div class="spotA1">♥&lt;/div>
                <div class="spotA3">♥&lt;/div>
                <div class="spotA5">♥&lt;/div>
                <div class="spotB2">♥&lt;/div>
                <div class="spotC1">♥&lt;/div>
                <div class="spotC3">♥&lt;/div>
                <div class="spotC5">♥&lt;/div>
                <div class="bottomindex">7
                    <br>♥&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 4.5em">
        <div class="card">
            <div class="front">
                <div class="index">10
                    <br>♠&lt;/div>
                <div class="spotA1">♠&lt;/div>
                <div class="spotA2">♠&lt;/div>
                <div class="spotA4">♠&lt;/div>
                <div class="spotA5">♠&lt;/div>
                <div class="spotB2">♠&lt;/div>
                <div class="spotB4">♠&lt;/div>
                <div class="spotC1">♠&lt;/div>
                <div class="spotC2">♠&lt;/div>
                <div class="spotC4">♠&lt;/div>
                <div class="spotC5">♠&lt;/div>
                <div class="bottomindex">10
                    <br>♠&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 6em">
        <div class="card">
            <div class="front red">
                <div class="index">3
                    <br>♥&lt;/div>
                <div class="spotB1">♥&lt;/div>
                <div class="spotB3">♥&lt;/div>
                <div class="spotB5">♥&lt;/div>
                <div class="bottomindex">3
                    <br>♥&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 7.5em">
        <div class="card">
            <div class="front">
                <div class="index">A
                    <br>♣&lt;/div>
                <div class="ace">♣&lt;/div>
                <div class="bottomindex">A
                    <br>♣&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 9em">
        <div class="card">
            <div class="front red">
                <div class="index">6
                    <br>♦&lt;/div>
                <div class="spotA1">♦&lt;/div>
                <div class="spotA3">♦&lt;/div>
                <div class="spotA5">♦&lt;/div>
                <div class="spotC1">♦&lt;/div>
                <div class="spotC3">♦&lt;/div>
                <div class="spotC5">♦&lt;/div>
                <div class="bottomindex">6
                    <br>♦&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 10.5em">
        <div class="card">
            <div class="front">
                <div class="index">6
                    <br>♠&lt;/div>
                <div class="spotA1">♠&lt;/div>
                <div class="spotA3">♠&lt;/div>
                <div class="spotA5">♠&lt;/div>
                <div class="spotC1">♠&lt;/div>
                <div class="spotC3">♠&lt;/div>
                <div class="spotC5">♠&lt;/div>
                <div class="bottomindex">6
                    <br>♠&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 12em">
        <div class="card">
            <div class="front red">
                <div class="index">5
                    <br>♥&lt;/div>
                <div class="spotA1">♥&lt;/div>
                <div class="spotA5">♥&lt;/div>
                <div class="spotB3">♥&lt;/div>
                <div class="spotC1">♥&lt;/div>
                <div class="spotC5">♥&lt;/div>
                <div class="bottomindex">5
                    <br>♥&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 13.5em">
        <div class="card">
            <div class="front">
                <div class="index">5
                    <br>♣&lt;/div>
                <div class="spotA1">♣&lt;/div>
                <div class="spotA5">♣&lt;/div>
                <div class="spotB3">♣&lt;/div>
                <div class="spotC1">♣&lt;/div>
                <div class="spotC5">♣&lt;/div>
                <div class="bottomindex">5
                    <br>♣&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 15em">
        <div class="card">
            <div class="front red">
                <div class="index">5
                    <br>♦&lt;/div>
                <div class="spotA1">♦&lt;/div>
                <div class="spotA5">♦&lt;/div>
                <div class="spotB3">♦&lt;/div>
                <div class="spotC1">♦&lt;/div>
                <div class="spotC5">♦&lt;/div>
                <div class="bottomindex">5
                    <br>♦&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 16.5em">
        <div class="card">
            <div class="front">
                <div class="index">8
                    <br>♣&lt;/div>
                <div class="spotA1">♣&lt;/div>
                <div class="spotA3">♣&lt;/div>
                <div class="spotA5">♣&lt;/div>
                <div class="spotB2">♣&lt;/div>
                <div class="spotB4">♣&lt;/div>
                <div class="spotC1">♣&lt;/div>
                <div class="spotC3">♣&lt;/div>
                <div class="spotC5">♣&lt;/div>
                <div class="bottomindex">8
                    <br>♣&lt;/div>
            </div>
        </div>
    </div>
    <div class="mycard" style="margin-left: 18em">
        <div class="card">
            <div class="front red">
                <div class="index">8
                    <br>♦&lt;/div>
                <div class="spotA1">♦&lt;/div>
                <div class="spotA3">♦&lt;/div>
                <div class="spotA5">♦&lt;/div>
                <div class="spotB2">♦&lt;/div>
                <div class="spotB4">♦&lt;/div>
                <div class="spotC1">♦&lt;/div>
                <div class="spotC3">♦&lt;/div>
                <div class="spotC5">♦&lt;/div>
                <div class="bottomindex">8
                    <br>♦&lt;/div>
            </div>
        </div>
    </div>
</div>

CSS:

.bottomhand {
    position: absolute;
    margin-left: -12.75em;
    left: 50%;
    width: 19.50em;
    height: 6.00em;
    bottom: 6.00em;
}
.card {
    background-image: url("../images/cardback.png");
    background-size: cover;
    border-color: #808080 #000000 #000000 #808080;
    border-width: 1px;
    border-style: solid;
    position: absolute;
    width: 3.75em;
    height: 5.00em;
    cursor: default;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
.front {
    background-color: #ffffff;
    color: #000000;
    position: absolute;
    width: 100%;
    height: 100%;
}
.red {
    color: #ff0000;
}
.index {
    font-size: 63%;
    font-weight: bold;
    text-align: center;
    position: absolute;
    left: 0.15em;
    top: 0.15em;
}
.bottomindex {
    font-size: 63%;
    font-weight: bold;
    text-align: center;
    position: absolute;
    right: 0.15em;
    bottom: 0.15em;
    -webkit-transform: rotate(-180deg);
    -moz-transform: rotate(-180deg);
    -ms-transform: rotate(-180deg);
    -o-transform: rotate(-180deg);
}
.ace {
    font-size: 300%;
    position: absolute;
    left: 0.325em;
    top: 0.250em;
}
.spotA1 {
    position: absolute;
    left: 0.60em;
    top: 0.5em;
}
.spotA2 {
    position: absolute;
    left: 0.60em;
    top: 1.5em;
}
.spotA3 {
    position: absolute;
    left: 0.60em;
    top: 2.0em;
}
.spotA4 {
    position: absolute;
    left: 0.60em;
    top: 2.5em;
}
.spotA5 {
    position: absolute;
    left: 0.60em;
    top: 3.5em;
}
.spotB1 {
    position: absolute;
    left: 1.55em;
    top: 0.5em;
}
.spotB2 {
    position: absolute;
    left: 1.55em;
    top: 1.0em;
}
.spotB3 {
    position: absolute;
    left: 1.55em;
    top: 2.0em;
}
.spotB4 {
    position: absolute;
    left: 1.55em;
    top: 3.0em;
}
.spotB5 {
    position: absolute;
    left: 1.55em;
    top: 3.5em;
}
.spotC1 {
    position: absolute;
    left: 2.50em;
    top: 0.5em;
}
.spotC2 {
    position: absolute;
    left: 2.50em;
    top: 1.5em;
}
.spotC3 {
    position: absolute;
    left: 2.50em;
    top: 2.0em;
}
.spotC4 {
    position: absolute;
    left: 2.50em;
    top: 2.5em;
}
.spotC5 {
    position: absolute;
    left: 2.50em;
    top: 3.5em;
}

JS:

$('.bottomhand').sortable({
    items: "> .mycard",
    tolerance: "pointer",
    start: function (event, ui) {
        ui.item.startPos = ui.item.index();
    },
    deactivate: function (event, ui) {
        console.log("deactivate Start position: " + ui.item.startPos);
        console.log("placeholder: " + ui.placeholder.index());
    },
    change: function (event, ui) {
        console.log("change Start position: " + ui.item.startPos);
        console.log("change helper position: " + ui.helper.index());
        console.log("placeholder: " + ui.placeholder.index());
    },
    beforeStop: function (event, ui) {
        console.log("Before Start position: " + ui.item.startPos);
        console.log("Before helper position: " + ui.helper.index());
        console.log("placeholder: " + ui.placeholder.index());
    },
    stop: function (event, ui) {
        console.log("After Start position: " + ui.item.startPos);
        //console.log("After helper position: " + ui.helper.index());
        console.log("placeholder: " + ui.placeholder.index());
    }
});
$('.bottomhand').disableSelection();
4

1 に答える 1

1

カードをマージン付きで配置しているため、dom内のカードの位置は、視覚的に配置されている場所については何もしません。

マージン左を削除して、次のようなものを使用する場合:

.mycard {
    position: relative;
    margin-left: -2.25em;
    width: 3.75em;
    height: 5.00em;
    float: left;
}

そして、それに変更.cardするとposition:relative;、それはあなたのために働くはずです:

http://jsfiddle.net/petersendidit/rcMwq/12/

于 2013-03-05T15:05:45.367 に答える