Вопрос по javascript, draggable – перетаскиваемый без jQuery UI

4

Как сделать элемент перетаскиваемым без использования jQuery UI?

У меня есть этот код:

<script type="text/javascript">
    function show_coords(event)
    {
        var x=event.clientX;
        var y=event.clientY;
        var drag=document.getElementById('drag');
        drag.style.left=x;
        drag.style.top=y
    }
</script>

<body style="height:100%;width:100%" onmousemove="show_coords(event)">
     <p id="drag" style="position:absolute">drag me</p>
</body>

Проблема в том, что я хочу перетаскивать, пока пользователь нажимает кнопку мыши. Я старалсяonmousedown но результаты были отрицательными.

Ваш Ответ

1   ответ
7

function enableDragging(ele) {
    var dragging = dragging || false,        //Setup a bunch of variables
        x, y, Ox, Oy,
        enableDragging.z = enableDragging.z || 1,
        current;
    ele.onmousedown = function(ev) {         //When mouse is down
        current = ev.target;
        dragging = true;                     //It is dragging time
        x = ev.clientX;                      //Get mouse X and Y and store it
        y = ev.clientY;                      // for later use.
        Ox = current.offsetLeft;             //Get element's position
        Oy = current.offsetTop;
        current.style.zIndex = ++enableDragging.z;  //z-index thing

        window.onmousemove = function(ev) {
            if (dragging == true) {                //when it is dragging
                var Sx = ev.clientX - x + Ox,      //Add the difference between
                    Sy = ev.clientY - y + Oy;      // 2 mouse position to the
                current.style.top = Sy + "px";     // element.
                current.style.left = Sx + "px";
                return false;                      //Don't care about this.
            }
        };
        window.onmouseup = function(ev) {
            dragging && (dragging = false);        //Mouse up, dragging done!
        }
    };
}

enableDragging(document.getElementById("drag"));  //draggable now!

var ele = document.getElementsByTagName("div");
for(var i = 0; i < ele.length; i++){              //Every div's is draggable
    enableDragging(ele[i]);                       // (only when its "position"
}                                                 //  is set to "absolute" or
                                                  //  "relative")

http://jsfiddle.net/DerekL/NWU9G/

Причина, по которой ваш код не работает, заключается в том, что<div> всегда будет следовать, куда движется ваш курсор, а вы на самом деле неdragging Это. Верхний левый угол всегда будет следовать за вашим курсором, а это не то, что мы хотели.

UPDATE

Теперь, если вам нужен только граббер или что-то подобное, просто измените эту часть скрипта:

ele.onmousedown = function(ev) {
    current = ev.target;

в

var grabber = document.createElement("div");
grabber.setAttribute("class", "grabber");
ele.appendChild(grabber);
grabber.onmousedown = function(ev) {
    current = ev.target.parentNode;

Теперь вы можете только нажать на граббер, чтобы начать процесс перетаскивания.

http://jsfiddle.net/DerekL/NWU9G/7/

Спасибо, и если вам это помогло, вы можете поставить галочку под счетом голосов.
Вот:jsfiddle.net/DerekL/NWU9G/7
Спасибо, но я хотел, чтобы в левом верхнем углу перетаскиваемого элемента могла быть точка или любая другая вещь, а поле можно было перетащить, только удерживая указатель мыши в углу, подскажите, как это сделать. И еще раз спасибо. NewUser
что означает проверка этой галочки. Пожалуйста, объясните, что я новичок NewUser
Это здорово, я не думал, что смогу сделать это без jQuery UI. Но я сделал, благодаря тебе. NewUser

Похожие вопросы