2013-10-28 21 views
5

このことが私を怒らせています!移行中のhtml要素と対話できません

htmlページの別のdivの中にプログラムで絶対配置されたdivを作成します。外部divはmousedownイベントとtouchstartイベント用に登録され、内側divはcss3遷移を使用して移動を開始します。

すべてのトランジションは、-WebKit-transformプロパティに影響します。

イベントハンドリングを除いてすべて正常に動作します: ChromeとSafariでは、すべてのイベントが外部divイベントハンドラでキャッチされますが、イベントのターゲットプロパティはほとんど表示されません。

divが終了すると、イベントターゲットは常に正しいものになりますが、divが遷移している間は正しくなりません。これはバグですか?何か不足していますか?

UPDATE:

次のサンプルは、ここではサファリとクロム

と互換性がありますが、問題をdemostratesオンラインサンプルです:http://jsfiddle.net/qfn7F/4/

球は、画面の上から生み出されますと、その底に向かって移動しています。ユーザーが球をクリックすると(mousedownイベント)、クリックされた球は画面から消えなければなりません。ここで

は球との相互作用を処理するコードです:

container.addEventListener(onSelect, function() { 
    if (event.target.classList.contains("transition")) { 
     var tDiv = event.target; 
     var box = tDiv.getBoundingClientRect(); 
     var durationEase = "0.25s linear"; 
     tDiv.style.pointerEvents = "none"; 
     tDiv.style.webkitTransform = "translate3d(" + box.left + "px," + box.top + "px, 1px)"; 
     tDiv.style.opacity = 0; 
     tDiv.style.webkitTransition = "opacity " + durationEase; 
    } 
    event.preventDefault(); 
    event.stopPropagation(); 
}, false); 

が、イベントのターゲットはほとんどのユーザーがクリックした球ではないので、球は一貫した方法で画面から消えません。

球が画面の下部に到達した場合、つまり遷移が終了すると、クリックイベントは100%機能します。

+0

をアニメーション化するのトランジションを与える使用の Intseadあなたはjsfiddle例を示してすることはできますか? –

+0

@AdamMoszczyńskiはここではフィドルですhttp://jsfiddle.net/qfn7F/4/ – Summon

+0

関連する質問: http://stackoverflow.com/questions/18629298/on-a-moving-element-dont-fire-the-マウスイベント http://stackoverflow.com/questions/9304215/css3-translate3d-mouse-events-issue http://stackoverflow.com/questions/5472802/css-z-index-lost-after-webkit- –

答えて

1

css3 Transformを使用してアニメーションを作成すると、同様の問題が発生しました。 CSSはCSSに位置使用を変換し、

jsfiddle.net

tDiv.style.top = (tDiv.offsetWidth * 0.5 + Math.random() * (window.innerWidth - tDiv.offsetWidth)) + "px"; 
tDiv.style.right = (window.innerHeight - tDiv.offsetHeight) + "px"; 
+0

これはトランスフォームアニメーションと同じようには機能しません。なぜなら、この場合はトランスフォームアニメーションと同じように機能しません。要素はキャッシュされません。 – Summon

+0

キャッシュ部分を理解できませんでした。あなたはそれについて何か説明できますか? –

+1

top、leftなどの代わりにtransformプロパティを使用して要素をアニメーション化すると、GPUアクセラレーションのためにパフォーマンスが大幅に向上します。これは、要素にtranslate3d(0,0,0)を適用し、左上のプロパティをアニメートする場合にも当てはまります。詳細はこちら:http://stackoverflow.com/questions/9661876/css-is-transition-left-top-gpu-accelerated – Summon

関連する問題