2013-09-03 34 views
21

Tôi đang cố gắng chuyển văn bản thành "xoay", bằng cách áp dụng chuyển đổi xoay một chiều, sau đó xoay vòng theo cách tiếp theo, khi di chuột qua. Tuy nhiên, nó không chờ đợi quá trình chuyển đổi đầu tiên được hoàn thành nên có vẻ như chỉ có quá trình chuyển đổi cuối cùng mới được áp dụng. Làm thế nào tôi có thể buộc nó phải đợi cho quá trình chuyển đổi đầu tiên hoàn thành? JSfiddle: http://jsfiddle.net/hari_shanx/VRTAf/7/cách đợi chuyển tiếp css để kết thúc trước khi áp dụng lớp tiếp theo

HTML:

<div id="chandelier"> 
    <nav> 
     <ul id="chandelier-list"> 
      <li id="logo-home" class="swing"><a href="#home" class="scrollPage">home</a> 

      </li> 
      <li id="logo-about" class="swing"><a href="#about" class="scrollPage">about us</a> 

      </li> 
      <li id="logo-range" class="swing"><a href="#range" class="scrollPage">our range</a> 

      </li> 
      <li id="logo-contact" class="swing"><a href="#contact" class="scrollPage">contact us</a> 

      </li> 
      <li id="logo-blog" class="swing"><a href="#blog" class="scrollPage">blog</a> 

      </li> 
     </ul> 
    </nav> 
</div> 

CSS:

.swing { 
    position: absolute; 
    -webkit-transform: rotate(-90deg); 
    -moz-transform: rotate(-90deg); 
    -o-transform: rotate(-90deg); 
    transform: rotate(-90deg); 
    writing-mode: lr-tb; 
    -webkit-transform-origin: right top; 
    -moz-transform-origin: right top; 
    -ms-transform-origin: right top; 
    -o-transform-origin: right top; 
    transform-origin: right top; 
    font-size: 18px; 
    -webkit-transition: all 0.2s ease-in-out; 
    -moz-transition: all 0.2s ease-in-out; 
    -o-transition: all 0.2s ease-in-out; 
    transition: all 0.2s ease-in-out; 
} 
.swing1 { 
    -webkit-transform: rotate(-80deg); 
    -moz-transform: rotate(-80deg); 
    -o-transform: rotate(-80deg); 
    transform: rotate(-80deg); 
} 
.swing2 { 
    -webkit-transform: rotate(-97deg); 
    -moz-transform: rotate(-97deg); 
    -o-transform: rotate(-97deg); 
    transform: rotate(-97deg); 
} 
.swing3 { 
    -webkit-transform: rotate(-85deg); 
    -moz-transform: rotate(-85deg); 
    -o-transform: rotate(-85deg); 
    transform: rotate(-85deg); 
} 
.swing4 { 
    -webkit-transform: rotate(-92deg); 
    -moz-transform: rotate(-92deg); 
    -o-transform: rotate(-92deg); 
    transform: rotate(-92deg); 
} 
.swing5 { 
    -webkit-transform: rotate(-89deg); 
    -moz-transform: rotate(-89deg); 
    -o-transform: rotate(-89deg); 
    transform: rotate(-89deg); 
} 
#logo-home { 
    top: 0; 
    left: -32px; 
} 
#logo-about { 
    top: 0; 
    left: -17px; 
} 
#logo-range { 
    top: 0; 
    left: 14px; 
} 
#logo-contact { 
    top: 0; 
    left: 48px; 
} 
#logo-blog { 
    top: 0; 
    left: 135px; 
} 
#chandelier nav ul li a { 
    text-decoration: none; 
} 
#chandelier nav ul { 
    list-style-type: none; 
} 

JS:

$('.swing').hover(

function() { 
    $(this).addClass('swing1'); 
    $(this).addClass('swing2'); 
}, 

function() { 
    $(this).removeClass('swing1'); 
    $(this).removeClass('swing2'); 
}); 
+0

Bản sao có thể có của http://stackoverflow.com/questions/2087510/callback-on-css-transition –

+0

Câu trả lời này có thể giúp bạn: http://stackoverflow.com/a/3679459/1665625 – lukeseager

Trả lời

32

Mỗi trình duyệt có sự kiện riêng của mình mà bạn có thể sử dụng để phát hiện cuối chuyển tiếp, chỉ liên kết như sau:

$(".yourClass").on('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', 
    function() { 
     //doSomething 
    }); 
+0

Điều này liên kết với tất cả chuyển tiếp, ví dụ 'scale' và' rotate'. Có cách nào để liên kết với một kết thúc chuyển tiếp cụ thể không? –

+1

Có thể đi bộ xung quanh là sử dụng các lớp khác nhau cho mỗi chuyển tiếp bạn muốn đợi và sử dụng hàm 'on()' trên chúng. –

+0

Làm cách nào để chúng tôi có thể thực hiện điều này mà không cần sử dụng JQuery? – prime

2

Cách chỉ áp dụng một lớp với jQuery, sau đó để CSS thực hiện phần còn lại. Bạn có thể sử dụng phần trăm thời gian trong khung hình chính để xác định điều gì xảy ra trong suốt hoạt ảnh. Giống như vậy:

@keyframes name { 
    0% { transform: rotate(0deg); } 
    50% { transform: rotate(-20deg); } 
    100% { transform: rotate(360deg); } } 
@-o-keyframes name { 
    0% { -o-transform: rotate(0deg); } 
    50% { -o-transform: rotate(-20deg); } 
    100% { -o-transform: rotate(360deg); } } 
@-moz-keyframes name { 
    0% { -moz-transform: rotate(0deg); } 
    50% { -moz-transform: rotate(-20deg); } 
    100% { -moz-transform: rotate(360deg); } } 
@-webkit-keyframes name { 
    0% { -webkit-transform: rotate(0deg); } 
    50% { -webkit-transform: rotate(-20deg); } 
    100% { -webkit-transform: rotate(360deg); } } 
+0

+1 đề xuất rất hay (chỉ được đề cập giống nhau trong câu hỏi khác của người dùng). nhưng điều này sẽ chỉ hoạt động trên các trình duyệt hỗ trợ 'khung hình chính' đúng không? dường như chỉ có IE 9 trở xuống là ngoại lệ. [Link] (http://caniuse.com/#search=keyframes) – Harry

+0

@Harry Có điều đó đúng nhưng CSS gốc của OP đã sử dụng chuyển đổi và chuyển đổi, và hỗ trợ trình duyệt là như nhau đối với họ. – Coop

0

Để chuyển tiếp css3 với jquery Tôi đề nghị sử dụng jquery.transit. Nó cung cấp một jquery.animate như api và callbacks mà sẽ làm việc trong trường hợp của bạn.

Các vấn đề liên quan