2017-09-14 4 views
0

スナップ可能なオブジェクトをスパンにスナップする(内側スナップのみを実行する)ときに、外にはっきりとしているにもかかわらず、隣接スナップを返すことがよくあります。それが最も重要な部分であるとして、SnapModeに注意してください:jQuery UI Snappableスナップモードではスナップモードのみが返されない

$(".draggable").draggable({ 
    snap: ".snap", 
    snapMode: "inner", 
    stop: function(event, ui) { 
     /* Get the possible snap targets: */ 
     var snapped = $(this).data('draggable').snapElements; 

     /* Pull out only the snap targets that are "snapping": */ 
     var snappedTo = $.map(snapped, function(element) { 
      return element.snapping ? element.item : null; 
     }); 

     /* Display the results: */ 
     var result= ''; 
     $.each(snappedTo, function(idx, item) { 
      result += $(item).text() + ", "; 
     }); 

     $("#results").html("Snapped to: " + (result === '' ? "Nothing!" : result)); 
    } 
}); 

これは、もともとこの質問に基づいています:How to find out about the "snapped to" element for jQuery UI draggable elements on snap

私はデザインごとに互いに隣接する「スナップ可能」の領域を必要とする私は、そのような方に構築しようとしている: drag and drop UI example

マイjsFiddleは、この問題を実証することはここにある:http://jsfiddle.net/myingling/dx54dapr/1/

(スナップ2にスナップすると、スナップ1とスナップ2の両方にスナップしていることがわかります)

+0

は、私は 'SNAPMODEを使用している場合は、なぜ、あなたは2つのスナップ領域 – codtex

+0

の間でいくつかのスペースを置く必要があると思う:「内部」'?ドロップされた領域内のオブジェクトだけを検出すべきですか? – Bing

答えて

0

スナップモードは、要素が他の要素にスナップするかどうかをチェックします。 snapModeドラッグ可能なスナップ要素のどのエッジをスナップするかを指定します。だからボックス間にいくらかのギャップを置く必要があり、snapToleranceも使用できます。

$(".draggable").draggable({ 
 
    snap: ".snap", 
 
    snapMode: "inner", 
 
    stop: function(event, ui) { 
 
     /* Get the possible snap targets: */ 
 
     var snapped = $(this).data('ui-draggable').snapElements; 
 
     
 
     /* Pull out only the snap targets that are "snapping": */ 
 
     var snappedTo = $.map(snapped, function(element) { 
 
      return element.snapping ? element.item : null; 
 
     }); 
 
     
 
     /* Display the results: */ 
 
     var result= ''; 
 
     $.each(snappedTo, function(idx, item) { 
 
      result += $(item).text() + ", "; 
 
     }); 
 
     
 
     $("#results").html("Snapped to: " + (result === '' ? "Nothing!" : result)); 
 
    } 
 
});
.draggable { 
 
    width: 90px; 
 
    height: 80px; 
 
    padding: 5px; 
 
    font-size: .9em; 
 
} 
 

 
.snap { 
 
    width: 300px; 
 
    height: 100px; 
 
    margin-top: 50px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script 
 
    src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js" 
 
    integrity="sha256-xNjb53/rY+WmG+4L6tTl9m6PpqknWZvRt0rO1SRnJzw=" 
 
    crossorigin="anonymous"></script> 
 
<link href="https://ajax.microsoft.com/ajax/jquery.ui/1.8.7/themes/black-tie/jquery-ui.css" rel="stylesheet"/> 
 

 
<div id="snap-one" class="snap ui-widget-header">Snap 1</div> 
 
<div id="snap-two" class="snap ui-widget-header">Snap 2</div> 
 

 
<div class="demo"> 
 
    <br clear="both" /> 
 
    
 
    <div id="draggable" class="draggable ui-widget-content"> 
 
     <p>Oh Snap!</p> 
 
    </div> 
 
    <div id="results"></div> 
 
</div>

+0

私は設計しようとしているページで、これらの要素の多くの行を作成しているので、それらの間に大きな余白を置くことは機能しません。私の実際のユースケースの模様はここにあります:https://stackoverflow.com/questions/46142843/css-position-absolute-on-one-axis-only-to-prevent-collision-overlap-without -wa – Bing

+0

問題をさらによく示すスクリーンショットで質問を更新しました。スペーシングがうまくいけば、私がリンクしていた元の質問/回答は十分でした。私のもともとの貧弱な説明に申し訳ありません。 – Bing

関連する問題