2017-02-15 5 views
0

要素のリストの上にドラッグする要素があります。 私はすでにノードのリストを持っています。すべてのノードにはマージンがあります。Javascript:event.targetでターゲットとする方法は、余白と呼ばれる外側のdivですか?

要素マージンまたはその要素(そのノード)をドラッグすると、アラートがトリガーされます。

余白を持つ要素を右クリックすると、親要素が選択されます。それで私が理解しているのは、私が外側のdivを見つけることができるということです?

ここで、リストの上をドラッグしてノードをドラッグしているかどうかをチェックしますが、それは機能しますが、要素マージンをドラッグするとトリガーするように見えます。

私はこれを純粋なjavascriptで書いています.Jqueryや外部ライブラリのファンではありません。

if (listItemNode.parentNode == listNode && listItemNode != placeholderNode) { 
      // If the mouse pointer is in the upper half of the list item element, 
      // we position the placeholder before the list item, otherwise after it. 
      var rect = listItemNode.getBoundingClientRect(); 
      if (listSettings.horizontal) { 
       console.log(rect.left); 
       var isFirstHalf = event.clientX < rect.left + rect.width/2; 

      } else { 
       var isFirstHalf = event.clientY < rect.top + rect.height/2; 
      } 
      listNode.insertBefore(placeholderNode, 
       isFirstHalf ? listItemNode : listItemNode.nextSibling); 


} 
+0

mouseleaveイベントを使用できるようにHTMLとCSSを調整しますか? – user2182349

+0

マウス入力は追跡されないので、私はマウスを離れることができます。私はその要素をoutter divに入力するとき、または私が余白の上に入力するときにわからない –

答えて

1

要素のマージンは、要素の間の実際の要素の一部ではありません。したがって、要素にバインドされたイベントは、マージンによってトリガーされません。必要な結果を得るには、余白をパディングまたは枠に置き換えます。
マージンを使用してエレメントを他のエレメントでラップし、ラッパーをドロップ可能として定義することが効果的です。彼らはマージンの後ろにあり、イベントを引き起こす可能性があります

+0

私はマージンが必要であるかどうかは、ユーザーが余裕を持っているかどうか計算する方法でなければならない –

+0

多分、非常に複雑で、開発と維持が難しく、独自の問題を抱える可能性のあるいくつかの方法があります。いずれにしても、マージンの仕方と矛盾し、AFAIKはマージンの背後にあるアイデアです。境界線ではなくマージンが必要なのはなぜですか?同様の視覚的結果をもたらすことができますが、実際には要素の一部です。 –

+0

あまり難しくない方法について考えてみましょう。他の要素で余白を付けて要素をラップし、ラッパーをドロップ可能なものとして定義することができます。彼らはマージンの後ろにあり、イベントを引き起こす可能性があります –

関連する問題