0

通常、プラグインは多くの不要な機能を追加し、プロジェクトのサイズを大きくするため、些細な問題に対して独自のソリューションを作成することを好みます。サイズによってページが遅くなり、1 日あたり 100,000 ページビューの Web サイトで 30,000 の違い (jquery ドラッグ可能と比較して) は、請求書に大きな違いをもたらします。私はすでにjqueryを使用していますが、今のところ必要なのはそれだけだと思います。別のプラグインやフレームワークを使用して物事をドラッグするように言わないでください.

それを念頭に置いて、ボックスをドラッグできるようにするために、次のコードを書きました。コードは問題なく動作します (コード自体に関するヒントは大歓迎です) が、マウス カーソルをボックス制限の左側にドラッグすると、小さな不具合が発生しました: ボックス内のテキストが選択されます。

どうすれば解決できますか?ありがとう。

JavaScript:

$(document).ready(function () {

    var x = 0;
    var y = 0;

    $("#d").live("mousedown", function () {

        var element = $(this);
        var parent = element.parent();

        $(document).mousemove(function (e) {

            var x_movement = 0;
            var y_movement = 0;

            if (x == e.pageX || x == 0) {
                x = e.pageX;
            } else {
                x_movement = e.pageX - x;
                x = e.pageX;
            }

            if (y == e.pageY || y == 0) {
                y = e.pageY;
            } else {
                y_movement = e.pageY - y;
                y = e.pageY;
            }

            var left = parseFloat(element.css("left")) + x_movement;

            // hold inside left
            if (left <= 0) left = 0;

            // hold inside right
            var max_right = (parseFloat(element.outerWidth()) - parent.width()) * -1;
            if (left >= max_right) left = max_right;

            element.css("left", left);

            var top = parseFloat(element.css("top")) + y_movement;

            // hold inside top
            if (top <= 0) top = 0;

            // hold inside bottom
            var max_bottom = (parseFloat(element.outerHeight()) - parent.height()) * -1;
            if (top >= max_bottom) top = max_bottom;

            element.css("top", top);

            return false;

        });

    });

    $(document).mouseup(function () {
        x = 0;
        y = 0;
        $(document).unbind("mousemove");
    });

});

HTML:

<div style="position: relative; width: 500px; height: 500px; background-color: Red;">
    <div id="d" style="position: absolute; width: 100px; left: 0px; height: 100px; top: 0px; cursor: move; border: 1px solid black;">a</div>
</div>
4

2 に答える 2

2

テキストが選択されているという事実は、JavaScript とは何の関係もありません。これは、1 つのボタンが押された状態でマウス カーソルの周りを移動すると、ブラウザとテキストの選択の問題です。

少なくとも最新のブラウザーでは、テキストが選択されないようにする css を適用できます。

#d {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

(これは標準cssではありませんが、動作するはずです。)

于 2012-06-12T23:37:41.490 に答える
1

unselectable="on"要素に属性を追加するだけでなく、要素に CSS を使用して選択を防ぐことができます

例: http://jsfiddle.net/PS79Y/

CSS:

#d{
 -moz-user-select: -moz-none; 
 -khtml-user-select: none;
 -webkit-user-select: none;
 -ms-user-select: none;
 user-select: none;
}

-moz-noneとの間の例を見るには、https://developer.mozilla.org/en/CSS/user-selectnoneにアクセスしてください。

于 2012-06-12T23:37:21.163 に答える