2011-12-09 16 views
4

私はかなり奇妙な問題に遭遇しました。私はCSS3経由で回転可能なdivを持っています。 divには、前部div子と後div子があり、後ろdivには-webkit-transform: rotateY(180deg)が設定されています。180度回転されたdivは片側からのみクリック可能です

親要素が回転してdivの背面を表示すると、divの1つの側、具体的にはdivまたは右側の後半の子要素のクリックしか検出されないという問題があります。フロントサイドのdivは、要素の面全体のクリックを検出します。また、z-インデックスは正常です。私は問題が回転とブラウザの半分を「近くに」表示していることが原因であると思われますか?

これが壊れているコードは非常に複雑なので、私は以下の問題を示すテストファイルを作成しました。私はここで見つけることができる3D変換のために書いたjQueryプラグインを使用していますhttps://github.com/pwhisenhunt/jquery.transform/blob/master/jquery.transform.js

編集:実験の後、ボタン要素のクリックは100-200pxからのみ登録され、0-100pxでは登録されません。つまり、実際にはdivの後半に登録するだけです。

ご協力いただきありがとうございます。

<html> 
<head> 
    <style> 
     .element{ 
      width:200; 
      height:200; 

      -webkit-perspective: 800; 
      -webkit-transform-style: preserve-3d; 
     } 

     .element figure { 
      display: block; 
      height: 100%; 
      width: 100%; 
      position: absolute; 
      -webkit-backface-visibility: hidden; 
      border:1px solid yellow; 
     } 

     .element .front { 
      -webkit-border-radius:8px; 
      padding: 0px; 
      margin: 0px; 
      background-color:yellow; 
      z-index: 9870; 
     } 

     .element .back { 
      -webkit-border-radius:8px; 
      padding: 0px; 
      margin: 0; 
      -webkit-transform: rotateY(180deg); 
      z-index: 0; 
      border: 1px solid red; 
      background-color:green; 
     } 
    </style> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
      <script src="https://raw.github.com/pwhisenhunt/jquery.transform/master/jquery.transform.js"></script> 
    <script> 
     $(function(){ 
      var temp = false; 
      $(".element").click(function(){ 
       if(temp == false){ 
        $(this).transform("setAnimationDuration", 1).transform("rotateY", 180); 
        $(this).unbind("mouseenter mouseleave"); 
        button = $(document.createElement('div')).attr("id", "button").css({ width: 200, height: 50, backgroundColor:"blue" }); 
        button.click(function(){ 
         console.log("Clicking"); 
        }); 
        temp = true; 
        $(this).append(button); 
       } 
      }) 
     }) 
    </script> 
</head> 
<body> 
    <div class="element"> 
     <figure class="front"></front> 
     <figure class="back"></front> 
    </div> 
</body> 
</html> 

A JSFiddle Example of the Problem - Can be found HERE!

+2

は、あなたがこのためにhttp://jsfiddle.net/を一緒に入れて気にしませんか? – Filip

+0

問題の例を含めるように質問を編集しました.3D変換用のjqueryプラグインをダウンロードする必要があります。ありがとう! –

+0

私がに取り組んで、同じ問題を抱えている[jsfiddle](http://jsfiddle.net/theredhead/rZT2k/) – Kris

答えて

1

あなたがコンテナを紛失しているようです(これは私が紛失したのとほとんど同じです)。

は、それがひっくり返されて、外側の要素が、それ内部のラッパーではありませんthe official documentation

を参照してください。そのターンに2つのdivの1が表示される(と遷移が発生する)

+0

すばらしいリンク!問題なく回転しますか?なぜ彼はこの答えを受け入れなかったのですか? – Assaf

0

それはあなたの代わりに、正規のライブまたはデリゲートイベントバインドを使用する必要があること(と私は推測しています)である可能性があります。私はクリックイベントを推測している可能性があります '回転'せずに元のdivの位置をいくつか '覚えている。

+0

されていないようです。私はlive()とdelegateを同じ結果で試してみました...ありがとうございます。 –

4

私はこれと同じ問題を持っていた、反転したときに、わずかに親のローテーションを変更することによって、それを修正することができました - 私は

`.flip-holder.flipped { 
-webkit-transform: rotateY(180deg); 
-moz-transform: rotateY(180deg); 
transform: rotateY(180deg); 
}` 
を変更

`$.flip-holder.flipped { 
-webkit-transform: rotateY(180.5deg); 
-moz-transform: rotateY(180.5deg); 
transform: rotateY(180.5deg); 
}` 

全体背面

へ(プラス絶対位置の要素があふれた)今クリッカブルた、テキストやイメージがはっきりしているので、ブラウザは回転の余分な0.5degをレンダリングしませんでした。

10

この返信は私たちの大部分にとっては遅すぎることは知っていますが、今日この問題に遭遇しましたが、返信のいずれも解決できませんでした。

解決策@kristiankeaneによって、残りの半分はクリックできなくなりました。私はusing a container for the wrapperであった。それはウェブキットの奇妙なバグです。私はそれを修正し、transform:rotateY(180deg)をtransform:rotateY(-180deg)に変更することで要素の100%をクリック可能にしました

本当に奇妙です私はそれがどのように機能するのか分からないが、それはした。これが誰かを助けることを願っています

+0

ありがとう!それは私のために働いた:) –

+0

完璧な作品!ありがとう! –

0

すべてのトリックが180.5などに戻って回転して回転した後...回転が終了すると - 前面と背面の少しの両方を翻訳し、それらが重ならない回転要素からクローンのhtml、新しい要素を作成し、代わりに古い

1

の新しい要素を挿入します。 問題は、次のように固定します。

例:

.element .front { 
     -webkit-transform: translateZ(1px); 
    } 

    .element .back { 
     -webkit-transform: rotateY(180deg) translateZ(1px); 
    } 
+0

これが唯一の解決策であることが判明しました。しかしキーは、あなたが裏返したカードにtranslateZを適用し、裏返したときにのみ適用します。そうすれば、translateZがそうでないと思われるファジー・レンダリングの影響を受けなくなります。 – strttn

関連する問題