dragStartPredicate

更新日: 2018-02-09

アイテムがドラッグされ、移動し始めたタイミングを決める関数です。 デフォルトでは、いくつかのオプションを持ったビルトインのプレディケート(真偽値を返す関数)を使います。

  • 初期値 : {distance: 0, delay: 0, handle: false}
  • 値 : functionobject

オブジェクトが渡された場合は、 デフォルトのプレディケートを使用します。 以下のプロパティを指定することができます。

distance: number
  • 初期値 : 0
  • ドラッグを開始させるのに必要な移動量(px)です。
delay: number
  • 初期値 : 0
  • ドラッグを開始させるのに必要なドラッグ時間(ミリ秒)です。
handle: string, boolean
  • 初期値 : false
  • ドラッグの開始イベントのターゲット要素となるセレクタです。

関数を渡す場合、ドラッグ開始ロジックを完全にカスタマイズすることができます。 ユーザーがアイテムをドラッグし始めると、 このプレディケート関数はtrueまたはfalseを返すまで続けて呼び出されます。 trueを返した場合、アイテムがドラッグされるたびに、アイテムが移動します。 falseを返した場合、アイテムは全く動きません。 この関数は、trueまたは、falseを返すと、 再度ドラッグされるまで呼び出されないことに注意してください。

プレディケート関数は2つの引数を受け取ります。

item: Muuri.Item
ドラッグ中のアイテムです。
event: object
ドラッグイベント(Hammer.jsのイベントです)
// デフォルトのプレディケートの設定です。
var grid = new Muuri(elem, {
  dragStartPredicate: {
    distance: 10,
    delay: 100,
    handle: '.foo, .bar'
  }
});
// 独自のプレディケートを指定します。
var grid = new Muuri(elem, {
  dragStartPredicate: function (item, e) {
    // アイテムが1秒間ドラッグされた後に、アイテムの移動を開始します。
    if (e.deltaTime > 1000) {
      return true;
    }
  }
});

デモ

ドラッグして1秒後にアイテムを移動することができます。

アイテム1
アイテム2
アイテム3

JavaScript

var grid = new Muuri('.grid', {
  dragEnabled: true,
  dragStartPredicate: function (item, e) {
    // アイテムが1秒間ドラッグされた後に、アイテムの移動を開始します。
    if (e.deltaTime > 1000) {
      return true;
    }
  }
});

HTML

<div class="grid">
  <div class="item">
    <div class="item-content">
      アイテム1
    </div>
  </div>
  <div class="item">
    <div class="item-content">
      アイテム2
    </div>
  </div>
  <div class="item">
    <div class="item-content">
      アイテム3
    </div>
  </div>
</div>

CSS

.grid {
  position: relative;
}
 
.item {
  display: block;
  position: absolute;
  width: 100px;
  height: 100px;
  margin: 5px;
  z-index: 1;
  color: #000;
  border: 1px solid #000;
}
 
.item-content {
  position: relative;
  width: 100%;
  height: 100%;
}


© 2015 Haltu Oy. Licensed under the MIT license

このコンテンツはHaltuによるMuuriドキュメントを翻訳/改変したものです。