Как остановить элементы от изменения (свойства) во время событий JavaScript? - PullRequest
1 голос
/ 25 февраля 2011

В настоящее время я делаю движок "Drag and Drop" в javascript. Когда я выбираю элемент, чтобы переместить его, курсор меняется с cursor: move (который я установил в CSS) на cursor: text, что мне не нужно. Он также может выбирать (выделять) текст из других элементов, в то время как я перемещаю объект перетаскивания, который (опять же) мне не нужен. Как мне предотвратить возникновение этих проблем?

// JavaScript Document

var posX;
var posY;
var element;
var currentPos;

document.addEventListener("mousedown", drag, false);

function drag(event) {
    if(event.target.className == "square") {
        element = event.target;
        currentPos = findPos(element);
        posX = event.clientX -currentPos.x; //-parseInt(element.offsetLeft);
        posY = event.clientY -currentPos.y; //-parseInt(element.offsetTop);
        document.addEventListener("mousemove", move, false);
    }
}

function move(event) {

    if (typeof(element.mouseup) == "undefined")
        document.addEventListener("mouseup", drop, false);
    //Prevents redundantly adding the same event handler repeatedly

    element.style.left = event.clientX - posX + "px";
    element.style.top = event.clientY - posY + "px";
}

function drop() {
    document.removeEventListener("mousemove", move, false);
    document.removeEventListener("mouseup", drop, false);
    //alert("DEBUG_DROP");
}

function findPos(obj) { // Donated by `lwburk` on StackOverflow
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
        return { x: curleft, y: curtop };
    }
}

CSS:

.square {
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
    cursor:move;
}

p {
    padding: 0px;
    margin: 0px;
    outline-style: dotted;
    outline-color: #000;
    outline-width: 1px;
}

HTML:

<body>

<p class="square">Thing One</p>
<p class="square">Thing Two</p>

</body>

Большое спасибо за чтение и даже больше за помощь! Это очень много значит, особенно потому, что я только начинаю изучать язык.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2011
<p class="square" ondragstart="return false" onselectstart="return false">Thing One</p>
0 голосов
/ 25 февраля 2011

Эй, Для предотвращения выделения можно использовать CSS:

* {
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
}

Для предотвращения действий по умолчанию (которые могут быть причиной изменения курсора?) В обработчике событий укажите

event.preventDefault() 

где событие - это ваше событие (передается обработчику). Вы также можете попробовать установить атрибут CSS в обработчике событий:

event.target.setAttribute("style","cursor: move;");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...