2011-07-29 26 views
17

All,webkitTransitionEnd sự kiện được kích hoạt khi quá trình chuyển đổi kết thúc vào div và chuyển tiếp kết thúc trên tất cả các div CHILD?

Tôi có một tình hình có vẻ gần như thế này:

My trang HTML một chứa div (mà tôi sẽ gọi "parentDiv") mà tôi đang thực hiện một quá trình chuyển đổi. Khi quá trình chuyển đổi kết thúc, nó nên gọi "onTransitionEndParent"

parentDiv chứa một div (mà tôi sẽ gọi "childDiv") mà tôi đang thực hiện một khác nhau chuyển đổi. Khi quá trình chuyển đổi đó kết thúc, nó sẽ gọi "onTransitionEndChild".

Vì vậy, mã của tôi trông gần như thế này:

parentDiv.addEventListener("webkitTransitionEnd", onTransitionEndParent, false); 
childDiv.addEventListener("webkitTransitionEnd", onTransitionEndChild, false); 

Vấn đề tôi đang tìm kiếm ...

onTransitionEndParent được gọi khi của parentDiv chuyển mục đích (đúng). Tuy nhiên, nó CŨNG gọi khi childDiv cùng kết thúc quá trình chuyển đổi (không phải những gì tôi mong đợi ...)

Nói cách khác ...

  • onTransitionEndChild được gọi khi chuyển childDiv của kết thúc
  • onTransitionEndParent được gọi khi chuyển parentDiv của kết thúc VÀ LẠI khi chuyển childDiv của kết thúc

là thứ này e hành vi chính xác, hoặc tôi đang làm điều gì đó sai?

Có cách nào để đảm bảo rằng onTransitionEndParent CHỈ được gọi khi quá trình chuyển đổi của ParentDiv kết thúc và KHÔNG khi nào quá trình chuyển đổi của div con đó kết thúc?

Rất cám ơn trước.

Trả lời

32

transitionEnd được gọi là sự kiện bubbling đang được gửi đi (bong bóng) từ trẻ sang cha mẹ.

lựa chọn cho bạn:

  1. Hoặc phân tích event.target tài sản của đối tượng sự kiện - nó nên chứa phần tử với quá trình chuyển đổi kết thúc.
  2. Hoặc để cài đặt trình xử lý sự kiện chuyển tiếpEnd ​​trên mỗi phần tử con và gọi event.stopPropagation() để tránh bị sủi bọt.
+0

Cảm ơn, c-nụ cười. Câu trả lời hoàn hảo. – mattstuehler

+0

'event.stopPropagation()' NÀY. Không biết, tuyệt vời của bạn. – TERMtm

+3

Tôi không biết 'transitionEnd' sôi nổi. Chỉ bằng sự trùng hợp ngẫu nhiên, tôi mới không gặp phải vấn đề này trong năm. Tôi đã trải nghiệm nó lần đầu tiên hôm nay và tôi rất vui vì tôi đã tìm thấy câu trả lời của bạn. Kiểm tra các yếu tố nguồn để xác định thời tiết để hành động trên nó hay không là cách để đi cho tôi. – WrongAboutMostThings

2

Tôi gặp phải sự cố tương tự sau lần cập nhật chrome cuối cùng. Hoạt ảnh trẻ em được kích hoạt hoạt ảnh cho phụ huynh. Điều này chỉ xảy ra trong Chrome dành cho máy tính để bàn chứ không phải trong FF hoặc Chrome dành cho thiết bị di động.

Đối với bất cứ ai quan tâm đến tôi giải quyết điều này bằng cách sử dụng:

 $(element).on("animationend webkitAnimationEnd", function(){ 
      //do something 
     }) 
     .children().on("animationend webkitAnimationEnd", function(){ 
      return false; //you can just use event.stopPropagation() 
     }); 
0

Để thêm vào @ c-nụ cười trả lời, kiểm tra event.propertyName giúp khi có nhiều hiệu ứng chuyển tiếp trên phần tử. Vì vậy, ví dụ -

button.addEventListener('transitionend', function(event) { 
    if (event.target.classList.contains('button') && event.propertyName === 'opacity') { 
    button.classList.add('hide'); 
    } 
}, false); 
+0

Có lẽ đây có phải là nhận xét về câu trả lời @ c-nụ cười không? – Barett

+1

Tôi không có danh tiếng đủ cao để thêm nhận xét vào các câu trả lời khác :(Gotta nhận được rằng S.O cred – scottsandersdev

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