2016-03-23 8 views
0

私は、dragDirectiveをAngular2で書いています。要素はng-forを使用して配置され、デフォルトはposition:relativeになります。要素を移動するには、position属性をfixedに変更する必要があります。これにより、要素の位置が突然ジャンプします。CSS:位置を変更する方法:固定して相対的な "左"と "上"の値を保持する

どうすれば解決できますか?

テンプレート -

<li *ngFor = "#el of dragZoneElems; #idx = index"> 
    <h1 [dragResponder] = "true">{{el.first}} {{el.last}}</h1> 
</li> 

のディレクティブ

this._mousedown.switchMap((mdwnEvn, i) => { 
     this.DisableSelection(); 
     mdwnEvn.preventDefault(); 
     this._messageBus.dispatch("dragStart", this._elem); 
     return Rx.Observable.create((observer) => { 
      observer._next({ 
       prevx: mdwnEvn.x - this._elemBounds.left - window.pageXOffset, 
       prevy: mdwnEvn.y - this._elemBounds.top - window.pageYOffset 
      }); 
     }); 
    }).switchMap((offSet, i) => { 
     return this._mousemove.flatMap((mmoveEvn, i) => { 
      mmoveEvn.preventDefault(); 
      this.DisableSelection(); 
      return Rx.Observable.create(observer => { 
       observer._next({ 
        left: mmoveEvn.x - offSet["prevx"], 
        top: mmoveEvn.y - offSet["prevy"] 
       }); 
      }); 
     }).takeUntil(this._mouseout).takeUntil(this._mouseup); 
    }).subscribe({ 
     next: pos => { 
      this.SetPosition(pos); 
     } 
    }); 
} 

SetPosition機能 -

SetPosition(pos : Object){ 
    this._renderer.setElementStyle(this._elem.nativeElement, "position", "fixed"); 
    this._renderer.setElementStyle(this._elem.nativeElement, "left", (pos["left"] - this._margin[1]).toString() + "px"); 
    this._renderer.setElementStyle(this._elem.nativeElement, "top" , (pos["top"] - this._margin[0]).toString() + "px"); 
} 

答えて

0

あなたが同じ位置を維持する必要がある場合は、固定位置は、ウィンドウの位置に関連していますウィンドウの幅と高さを計算し、それらの値を加算または減算する必要があります。

+0

ウィンドウに対して相対位置(ng-forによって設定)を取得するにはどうすればよいですか? – shiv

+0

はいウィンドウ、ドキュメント、およびページには多くのプロパティがあります http://www.w3schools.com/jsref/prop_win_pagexoffset.asp –

+0

こんにちは、私は変更する単一のプロパティを見つけることができないようです相対位置から固定位置への変更時。しかし、要素はまだ位置を移動します。私はそれに応じて現在の位置を相殺できるように、どのプロパティ値が変化するかを知る必要があります。 – shiv

0

質問が無関係になりました。私はクリックの境界を再初期化していないので、ジャンプが起こっていました。

関連する問題