当使用jQuery-ui中的droppable是,当接收的元素添加了transform时被拖拽的元素位置就不准确的解决办法?

代码地址:https://github.com/yu19931003/jQui-droppable

当接收div的元素添加了transform时,将div拖拽进去,div的视觉位置不在鼠标抬起的位置

解决办法就是对droppable的计算出的position进行计算后再使用

源demo地址:https://github.com/yu19931003/jQui-droppable/tree/master/draggetest

html:

  

1 <div class='header'></div>
2 <div class="content">
3     <div id="draggable" class="customCharts-parts">
4         <div class="parts-category div">1</div>
5         <div class="parts-category div">2</div>
6         <div class="parts-category div">3</div>
7     </div>
8     <div class="right"><div id="template"></div></div>
9 </div>

css:

1 *{margin:0;padding:0;}
2 #draggable { width: 200px; height: 100px; position: absolute;left:0px;top:0px;background:#000;}
3 .parts-category { width: 100px; height: 20px; background: #ff0; }
4 #template { width: 600px; height: 600px; transform: scale(0.6); transform-origin: 0 0; background: #ff0000;;}
5 .header{ height: 85px; background: pink;}
6 .content{ overflow: hidden; position: relative;}
7 .right{margin-left: 200px;}
8 .div{ width: 100px; height: 20px; background: #ff0;}

js:

 1 $(function() {
 2     $( ".customCharts-parts > div" ).draggable({
 3         addClasses: false,
 4         cursor: "move",
 5         helper: 'clone',
 6         revert: 'invalid',
 7         zIndex: 999
 8      });
 9     $( "#template" ).droppable({
10     accept: ".parts-category",
11     drop: function( event, ui ) {
12     let curr = $(ui.helper).clone();
13     let left = (ui.position.left-200) / 0.6; //200是接收元素的偏移大小,0.6是接收元素的缩放比例
14     let top = ui.position.top / 0.615     $(curr).css({'left': left + "px", 'top': top + "px"});
16     $(this).append(curr);
17     curr.removeClass('parts-category');
18     $(curr).resizable();
19     $(curr).draggable({
20         addClasses: false,
21             zIndex: 999,
22         cursor: "move",
23         // drag: function(event,ui) {
24            // 在拖拽的时候改变当前对象防止拖拽的对象和当前对象不一致
25                             
26           // let left = (ui.position.left-200) / 0.6;
27          // let top = ui.position.top / 0.6 + (20 * 0.6)
28         //$(curr).css({'left': left + "px", 'top': top + "px"});
29     // }
30     })
31     }
32 });
33 });                

 

posted on 2019-08-29 11:03  小雨子1993  阅读(708)  评论(0编辑  收藏  举报

导航