jquery - Animating an element to it's current position moves it somewhere else -


i have following self-contained test page:

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head>     <title>drag tests</title>     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>     <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.8/jquery-ui.min.js" type="text/javascript"></script>      <style type="text/css">         #leftcolumn         {             float: left;             width: 200px;             border-right: 1px solid gray;             background-color: #eee;         }          #mainarea         {             float: left;             width: 600px;             background-color: #bbb;         }          .draggable         {             width: 120px;             height: 1em;             border: 1px solid gray;             text-align: center;             vertical-align: middle;             margin: 20px auto;             padding: 1em;             background-color: white;         }          .droparea         {             width: 140px;             height: 1.3em;             border: 1px solid #ccc;             text-align: center;             vertical-align: middle;             margin: 20px auto;             padding: 1em;             background-color: white;         }          .hoverclass         {             border-color: red;         }      </style>     <script type="text/javascript" language="javascript">         $(function () {             $(".draggable").each(function () {                 var myelem = $(this);                 myelem.data("oldleft", myelem.offset().left).data("oldtop", myelem.offset().top);                 myelem.animate({ "left": myelem.get(0).offsetleft, "top": myelem.get(0).offsettop }, "fast"); //added test             });             $(".draggable").draggable({ revert: "invalid" });             $("#droparea1").droppable({ hoverclass: "hoverclass" });             $("#leftcolumn").droppable({                 drop: function (event, ui) {                     var myelem = ui.draggable;                     myelem.animate({ "left": myelem.data("oldleft") + "px", "top": myelem.data("oldtop") + "px" }, "fast");                 }             });          });     </script> </head> <body>     <div id="leftcolumn">         <div class="draggable">block 1</div>         <div class="draggable">block 2</div>         <div class="draggable">block 3</div>     </div>     <div id="mainarea">         <div id="droparea1" class="droparea"></div>     </div> </body> </html> 

when refreshing page, 3 blocks on left move, being set current positions. i've tried various ways of getting current position (.postion(), .offset(), .attr("offsetleft")).

any help?

i finished writing similar. since didn't define css position on blocks, default relative. passing in coordinates, via offset() or position() result in "the wrong answer" coords relative parent div. want move blocks relative ("+=_px" or "-=_px) in animate call.

what had done find difference between desitination , origin, , adjust animate call appropriately. fcn assumes destination above (ymmv);

function movevidtodrop(dragitem, dropitem) {     var deltatop = dropitem.offset().top - dragitem.offset().top;     var deltaleft = dropitem.offset().left - dragitem.offset().left;     var dirtop = '+=';     var dirleft = '+=';      if (deltatop < 0) {         dirtop = "-=";         deltatop = math.abs(deltatop);     }      if (deltaleft < 0) {         dirleft = "-=";         deltaleft = math.abs(deltaleft);     }      dragitem.animate({ top: dirtop + deltatop, left: dirleft + deltaleft }, 0); } 

similarly, if want send draggable programatically home do:

.animate({ left: "0px", top: "0px" }, "slow") 

Comments

Popular posts from this blog

linux - Mailx and Gmail nss config dir -

c# - Is it possible to remove an existing registration from Autofac container builder? -

php - Mysql PK and FK char(36) vs int(10) -