2013-03-06 18 views
8

neden bu CSS3 Rotate on animated element causing click event not to invokeCSS3 Rotasyon geçiş aralıklı fare tıklaması algılama

çok benzer bir konudur.

Ödeme benim sandbox: http://jsfiddle.net/5bsG3/2/

Ben fareyi üzerinde, Y ekseni etrafında dönen bir bağlantı içinde bir süresi var. Tıklama olayı (jQuery için veya sadece bağlantı navigasyonu için) her zaman algılanmaz. Bağlantının dolgulu bölgesine tıklamayı deneyin (metnin hemen dışında ancak bağlantıda). Neredeyse, vurma tespiti ile ilgili bir sorun varmış gibi, çünkü açıklık dönüyor ve böylece farenin açıklığa tıklanmadığı açılarda. Fare yine de LINK'in doldurulmuş bölgesine tıklasa bile. 70-110 derece arasındaki açı problem gibi görünüyor.

Yukarıda belirtilen yayında önerilen çözüm bu sorunu düzeltmez. Ayrıca, rotasyonum bir JS aralığı tetikleyicisi yerine CSS geçişi olarak ele alındığından, sorunum biraz farklı olabilir.

Herhangi bir düşünce? Bunu daha önce gören oldu mu? Bunun bağlantı yapmanın sevecen bir yolu olduğunu biliyorum, ancak hedef web sitesi için kabul edilebilir miktarda peynir var.

Jsfiddle'ı basitleştirmek için çekinmeyin, basit bir şekilde başladım ve sorunu tanımlamak için biraz hata ayıklama bilgisi ekledim.

html:

CSS:

ul li 
{ 
    display: inline; 
    float: left ; 
} 

.flip-link 
{ 
    float:left ; 
} 

span 
{ 
    float:left ; 
} 


.flip-link { 
    display: block; 
    overflow: hidden; 

    height: 20px; 
    padding: 5px 50px 7px 50px ; 
    margin-right: 10px ; 

    background: #AAA; 

    -webkit-perspective: 50px; 
     -moz-perspective: 50px; 
     -ms-perspective: 50px; 
      perspective: 50px; 

    -webkit-perspective-origin: 50% 50%; 
     -moz-perspective-origin: 50% 50%; 
     -ms-perspective-origin: 50% 50%; 
      perspective-origin: 50% 50%; 
} 

.flip-link span { 
    display: block; 
    position: relative; 

    background: #EEE; 

    padding: 0px 10px ; 

    -webkit-transition: all 1000ms ease; 
     -moz-transition: all 1000ms ease; 
     -ms-transition: all 1000ms ease; 
      transition: all 1000ms ease; 

    -webkit-transform-origin: 50% 0%; 
     -moz-transform-origin: 50% 0%; 
     -ms-transform-origin: 50% 0%; 
      transform-origin: 50% 0%; 

    -webkit-transform-style: preserve-3d; 
     -moz-transform-style: preserve-3d; 
     -ms-transform-style: preserve-3d; 
      transform-style: preserve-3d; 

} 
    .flip-link:hover span 
    { 
     -webkit-transform: translate3d(0px, 0px, 0px) rotateY(360deg); 
      -moz-transform: translate3d(0px, 0px, 0px) rotateY(360deg); 
      -ms-transform: translate3d(0px, 0px, 0px) rotateY(360deg); 
       transform: translate3d(0px, 0px, 0px) rotateY(360deg); 

     color: #55FF55 ; 
    } 

JS:

var linkClickCount = 0 ; 
var spanClickCount = 0 ; 

$(document).ready(function() { 
    $('.flip-link').click(function() { 
      linkClickCount++ ;    
      $("#LinkCounter").text(linkClickCount); 

      return (false); 
    }); 

    $('.flip-link span').click(function() { 
      spanClickCount++ ;    
      $("#SpanCounter").text(spanClickCount); 
    }); 
}); 
+1

Açıklık geçmediği takdirde fare tıklatmasının iyi çalıştığından bahsetmeyi unuttum. Statik açıları ayarlarsam, linkin doldurulmuş bölgesini tıklayabilir (metinde değil) ve yine de tıklamayı tespit edebilir. Ama eğer metin dönüyorsa, 70-110deg civarında bir yerde, * sürekli olarak * tıklamayı yakalamaz. –

+0

Öğe döndürüldüğünde tıklamaları kaydetmeniz gerekiyor mu? kritik mi? –

+0

Evet, bir bağlantı olduğu için rotasyonun bitmesini beklemeden bağlantıyı tıklayabilmesi için kullanıcıya ihtiyacım var. Dönüş sırasında tıklarsa ve tıklama çalışmazsa, doğal varsayım bağlantının tıklanabilir olmamasıdır.Ama iyi bir soru, canlı (ama çok kamuoyuna açık değil) projeyi buradan indirebilirsiniz: www.trickspoke.com Bu canlı site için geçiş oldukça hızlıdır, problemi en aza indirir - hala orada olsa bile. –

cevap

2

sorunu. CSS kullanan tarayıcı özellikleri ve tarayıcılar arasındaki ayrıcalıklar olduğu için, bir CSS çözümü kullanarak sorun yaşayacaksınız. Ayrıca, CSS'nin bir animasyonun ortasında olduklarında div'lerinizi gerçekten daralttığını fark etmeniz gerekir. vizyonumuz aslında ne olup bittiği değil, aslında div boyutunun 0'a çökmesidir, yani tıkladığınızda tıkladığınızda "gerçekten tıklarsınız." ifadesiyle, mutlak olarak konumlandırılmış bir div'i bindirme olarak kullanmanız ve tıklamanız gerektiğini gösterir. hatta hala aslında bir bağlantıyı tıklayarak yanılsaması olacak net olmayan görünür div dan. o arka arka tarafında tıklama almayacağını gösterilmektedir oluyor böylece sürece, döndürülür

<a id="link"></a> 

$("#link").click(function(){ 

spanClickCount++; 
$("#SpanCounter").text(spanClickCount); 

} 
+0

Hmm ... Takip ettiğimi sanmıyorum Eğer yaygara çakışan nedir? Ben jsfiddle sandbox ile fiddled ve etiketi kaldırıldı ve aslında sadece açıklıklı ve referanslar bir noktaya referanslar CSS yerlerde kaldırıldı.Ama hatta daha da kötüye, Belki de bunu dönüştürürken bir şeyleri özlüyorum: Artı, benim problemim .click() olayının sadece belirli açılardan tetiklenmemesiydi.İsterseniz sadece window.location ayarlayabilirdim kod ne zaman bilmez ...:/ –

+0

Ben asla kaldırmak söyledi Ben sadece bir çapa vermek ve bağlantı işleyiciyi çapa uygulamak.Js keman denedim ve rotati bile çalıştı ng – Dnaso

+0

jsfiddle'ı güncelledim: http://jsfiddle.net/5bsG3/4/ ve hala önceki gibi aynı açılardan başarısız oluyor. :(Bu fare tıklamalarının tespit edilmemesine sebep olan her şey belirli bir açı aralığında çok tutarlıdır.Test için, özellikle bağlantı 90 civarında döndürülürken tıklamaya çalışıyorum (metnin ilk kez metni döner yan tarafa bakıyorum) Biliyorum bu bir köşe davası gibi görünüyor ama gerçek bir web sayfasında gördüğünüzde, büyük bir anlaşma olur. –

1

bir unsur özellikle görünür olmasını ters zorlamak için yayılma üzerinde

kullanın bu.

-webkit-backface-visibility: visible; 
    -moz-backface-visibility: visible; 
    -ms-backface-visibility: visible; 
    -o-backface-visibility: visible; 

Bak: http://jsfiddle.net/5bsG3/8/

+0

AFAIK, "arka görüş mesafesi", "görünür" olarak varsayılan ayardır. Yani bu hiçbir şeyi değiştirmemeli. – AlicanC

+0

Yanlışlıkla arka yüz görünürlüğümü gizli olarak ayarladım, bu yüzden sorunumu bulmama yardımcı oldu. Teşekkürler! – Spidy

İlgili konular