2016-05-24 6 views
3

自由に浮動するHTML divが必要です。他の要素と無関係にどこにでもドラッグして配置できます。要素が下の要素のビューをブロックすることがありますが、問題はありません。能力を最小化することもいいでしょう。これのためのライブラリはありますか?ドラッグ可能なウィジェットをHTML形式で描画するにはどうすればよいですか?

Google検索の結果は、ある位置からドラッグして別の位置にドラッグできるアイテムになります。フリーフローティングライブラリが見つかりませんでした。

答えて

0

いいディレクティブを使用できます。 そのGitHubリンクは... angular-dragdropです。

HTML DOM::

<div class="btn btn-primary" data-drag="true" data-jqyoui-options="{revert: 'invalid'}" ng-model="list1" jqyoui-draggable="{animate:true}" ng-hide="!list1.title">{{list1.title}}</div> 
<div class="thumbnail" data-drop="true" data-jqyoui-options ng-model="list2" jqyoui-droppable style='height:50px;'> 
    <div class="btn btn-success" data-drag="false" data-jqyoui-options ng-model="list2" jqyoui-draggable ng-hide="!list2.title">{{list2.title}}</div> 
</div> 

JS:

App.controller('OverviewCtrl', function($scope) { 
    $scope.list1 = {title: 'AngularJS - Drag Me'}; 
    $scope.list2 = {}; 
}); 
+0

実際にはどこにでも自由にドラッグすることはできません...あなたはそれをボックスに入れなければなりません。 –

1

あなたがdraggable属性とでいくつかのロジックを使用する必要が デモはhere

サンプルコードを見つけることができますjavascript .. (私はjsファイルを使用しているので、これはあなたの答えではありませんかもしれangularjsない) コードはjQueryのは、単純なdraggableオプションを持って、それを見てみましょう

function drag_start(event) { 
 
    var style = window.getComputedStyle(event.target, null); 
 
    event.dataTransfer.setData("text/plain", (parseInt(style.getPropertyValue("left"), 10) - event.clientX) + ',' + (parseInt(style.getPropertyValue("top"), 10) - event.clientY) + ',' + event.target.getAttribute('data-item')); 
 
} 
 

 
function drag_over(event) { 
 
    event.preventDefault(); 
 
    return false; 
 
} 
 

 
function drop(event) { 
 
    var offset = event.dataTransfer.getData("text/plain").split(','); 
 
    var dm = document.getElementsByClassName('dragme'); 
 
    dm[parseInt(offset[2])].style.left = (event.clientX + parseInt(offset[0], 10)) + 'px'; 
 
    dm[parseInt(offset[2])].style.top = (event.clientY + parseInt(offset[1], 10)) + 'px'; 
 
    event.preventDefault(); 
 
    return false; 
 
} 
 

 
var dm = document.getElementsByClassName('dragme'); 
 
for (var i = 0; i < dm.length; i++) { 
 
    dm[i].addEventListener('dragstart', drag_start, false); 
 
    document.body.addEventListener('dragover', drag_over, false); 
 
    document.body.addEventListener('drop', drop, false); 
 
}
div { 
 
    position: absolute; 
 
    left: 0; 
 
    top: 0; 
 
    /* set these so Chrome doesn't return 'auto' from getComputedStyle */ 
 
    width: 200px; 
 
    background: rgba(255, 255, 255, 1); 
 
    border: 2px solid rgba(0, 0, 0, 1); 
 
    border-radius: 4px; 
 
    padding: 8px; 
 
} 
 

 
body, 
 
html { 
 
    min-height: 100vh; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div draggable="true" class="dragme" data-item="0">Drag me</div>

+0

jqueryを既に参照している場合は、単に$( "。dragme")。draggable();を呼び出さないでください。これは、ポスターが求めていたことを実現します。それまたは$( "。dragme")ダイアログ({モーダル:false、autoOpen:true});イベントハンドラも追加しましたが、これはボーナスですが、尋ねられていないので、名誉です:-)。そう、はい、答えは、これのための図書館があります。剣道やjqueryを使って多くの人の名前を2つ挙げることができます。 –

+0

ええ、私は 'draggable()'と 'droppable()'について考えましたが、私は思った特定の領域にドラッグし、OPはどこにでもドラッグしたいと思っています。 – Dhara

1

のようになります。また https://jqueryui.com/draggable/#default

divの自由浮動を持っているだけで、それを設定します。

position: absolute; 
+0

絶対配置は必ずしも自由に浮動するとは限りません。私はあなたがポジション:固定を信じています。それとも私はここに何かを見逃しているのですか?絶対位置はルートHTMLレベルでは決して処理しないでください。必要な場所に内容を保持するためのコンテナが常に必要です。 –

+0

私は何度も根に絶対を使用していましたが、問題が発生したことはありませんでした。また、位置固定はページスクロールによって行われるため、完全に「フリー」ではありません。 – ilai

関連する問題