Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webkit and jQuery draggable jumping

As an experiment, I created a few div's and rotated them using CSS3.

    .items {          position: absolute;         cursor: pointer;         background: #FFC400;         -moz-box-shadow: 0px 0px 2px #E39900;         -webkit-box-shadow: 1px 1px 2px #E39900;          box-shadow: 0px 0px 2px #E39900;         -moz-border-radius: 2px;          -webkit-border-radius: 2px;         border-radius: 2px;     } 

I then randomly styled them and made them draggable via jQuery.

    $('.items').each(function() {         $(this).css({             top: (80 * Math.random()) + '%',             left: (80 * Math.random()) + '%',             width: (100 + 200 * Math.random()) + 'px',             height: (10 + 10 * Math.random()) + 'px',             '-moz-transform': 'rotate(' + (180 * Math.random()) + 'deg)',             '-o-transform': 'rotate(' + (180 * Math.random()) + 'deg)',             '-webkit-transform': 'rotate(' + (180 * Math.random()) + 'deg)',         });     });      $('.items').draggable(); 

The dragging works, but I am noticing a sudden jump while dragging the div's only in webkit browsers, while everything is fine in Firefox.

If I remove the position: absolute style, the 'jumping' is even worse. I thought there was maybe a difference in the transform origin between webkit and gecko, but they are both at the centre of the element by default.

I have searched around already, but only came up with results about scrollbars or sortable lists.

Here is a working demo of my problem. Try to view it in both Safari/Chrome and Firefox. http://jsbin.com/ucehu/

Is this a bug within webkit or how the browsers render webkit?

like image 236
gobbledygook88 Avatar asked Aug 19 '10 16:08

gobbledygook88


People also ask

Why is draggable not working?

You have one of these problems: Your jQuery or jQuery UI Javascript path files are wrong. Your jQuery UI does not include draggable. Your jQuery or jQuery UI Javascript files are corrupted.

What is jQuery draggable?

Draggable() Method This method allows the elements to be dragged with the help of mouse. Using jQuery UI, we can make the DOM(Document Object Model) elements to drag anywhere within the view port. This can be done by clicking on the draggable object by mouse and dragging it anywhere within the view port.

How do I limit a draggable area?

Limit draggable area using 'containment' option It is simple. All you have to do is, add an option called containment to the draggable() method. The containment option has a value parent.


1 Answers

I draw a image to indicate the offset after rotate on different browsers as @David Wick's answer.

offset after rotate

Here's the code to fix if you don't want patch or modify jquery.ui.draggable.js

$(document).ready(function () {     var recoupLeft, recoupTop;     $('#box').draggable({         start: function (event, ui) {             var left = parseInt($(this).css('left'),10);             left = isNaN(left) ? 0 : left;             var top = parseInt($(this).css('top'),10);             top = isNaN(top) ? 0 : top;             recoupLeft = left - ui.position.left;             recoupTop = top - ui.position.top;         },         drag: function (event, ui) {             ui.position.left += recoupLeft;             ui.position.top += recoupTop;         }     }); }); 

or you can see the demo

like image 113
Liao San Kai Avatar answered Sep 22 '22 11:09

Liao San Kai