2010-12-20 14 views
7

मैं एक वेब ऐप (आईपैड के लिए) कोडिंग कर रहा हूं जो घटना webkitTransitionEnd का उपयोग करता है।वेबकिट के साथ कोडिंग ट्रांसमिशन एंड

मैं दूसरा संक्रमण समाप्त होने पर एक फ़ंक्शन वापस कॉल करना चाहता हूं। दो संक्रमण होने का कारण यह है कि किसी के पास -webkit-transition-delay संपत्ति है, इसलिए वे दो एनिमेशन एक ही समय में समाप्त नहीं होते हैं। चूंकि यह एनीमेशन की एक श्रृंखला है, इसलिए मैं केवल तभी कॉल करना चाहता हूं जब दूसरा संक्रमण समाप्त हो जाए।

मेरा वर्तमान (बेवकूफ) वर्कअराउंड घटना के अंदर ईवेंट को बांधना है, जो jQuery में ऐसा कुछ दिखता है।

$(this).bind('webkitTransitionEnd', function(){ 
    $(this).bind('webkitTransitionEnd', function(){ 
     \*some code here*\ 
     $(this).unbind(); 
    }); 
    $(this).unbind(); 
}); 

यह काम करता है लेकिन अधिक एनिमेशन होने पर यह उपयोग करने योग्य नहीं है। कहें कि क्या मैं 50 एनिमेशन के बाद एक समारोह को वापस कॉल करना चाहता हूं जो अलग-अलग समय पर समाप्त होता है।

+0

आप स्पष्ट कर सकते हैं तुम क्या मतलब है आप दो संक्रमण हैं द्वारा के साथ कर सकता है? एक समय में केवल प्रति तत्व अनुमति 1 संक्रमण होना चाहिए। –

+0

@ केन: शायद समानांतर में दो एनिमेशन को फायर करके, उदाहरण के लिए, एक ही समय में दो divs को एक साथ एनिमेट करने के लिए। –

+4

पीएस बाध्य होने के बाद $ (यह) .one() का उपयोग करें यदि आप इसे निकालने के बाद ईवेंट को हटाना चाहते हैं। – Tokimon

उत्तर

0

यह परीक्षण नहीं किया गया है लेकिन आपको एक अच्छा विचार देना चाहिए।

function waitOnTransition(elem, endIndex, callback){ 
    var transitionIndex = 0; 
    $(elem).on('webkitTransitionEnd', function(){ 
     if(transitionIndex == endIndex){ 
      callback(); 
     }else{ 
      transitionIndex++; 
     } 
    }); 
} 
waitOnTransition('#elemID', 3, function(){ 
    //do stuff 
}); 

आप भी इसे करी

function makeTransitionEnd(endIndex){ 
    var endIndex = endIndex; 
    var out = function(elem, callback){ 
     var transitionIndex = 0; 
     $(elem).on('webkitTransitionEnd', function(){ 
      if(transitionIndex == endIndex){ 
       callback(); 
      }else{ 
       transitionIndex++; 
      } 
     }); 
    }); 
    return out; 
} 

//make curry 
var waitForThreeEnds = makeTransitionEnd(3); 
waitForThreeEnds('#elemID', function(){ 
    //do stuff 
}); 
संबंधित मुद्दे