2012-01-11 9 views

答えて

14
element.addEventListener('transitionend', function(event) { 
    alert("CSS Property completed: " + event.propertyName); 
}, false); 

今のところ、正確なイベント名は標準化されていません。 MDNからの引用は次のとおりです。

遷移が完了すると1つのイベントが発生します。
すべての標準準拠のブラウザでは、WebKitのイベントはtransitionend,
です。webkitTransitionEndです。

ここでWebkitのためのフィドルだ:私は現在、私はMarakanaチュートリアルから便利な、クロスブラウザの実装を共有しましょうまったく同じことをやっているとhttp://jsfiddle.net/bNgWY/

+0

これを不透明度のような特定のトランジションに割り当てる方法を教えてください。 –

+0

@Wraith - 特定のトランジションに割り当てることはできません。むしろ、あなたは要素上で発砲するイベントを聞きます。探している情報をイベントオブジェクトから取得できます。私の更新を参照してください。 –

+1

@Wraith:ジョセフにリンクされているページの「遷移の完了を検出する」を探してください。 'propertyName':遷移が完了したCSSプロパティの名前を示す文字列。 'elapsedTime':イベントが発生したときに遷移が実行された秒数を示すfloat。この値は、遷移遅延の値の影響を受けません。 –

3

// First, we store the names of the event according to the browsers 

    var navigatorsProperties=['transitionend','OTransitionEnd','webkitTransitionEnd']; 

      //For each of them... 
      for(var i in navigatorsProperties) 
      { 
       //We attach it to our overlay div 
       el.addEventListener(navigatorsProperties[i],function() 
       { 
        // Here's the code we want to fire at transition End 
         console.log('transition end'); 

       },false); 
      } 

それは(MSDNを参照)IE10transitionendでトランジションをサポートしていることに留意すべきです。 (ので、これらのブラウザのためmsTransitionendまたは何をしようとしません)以下

IE9とはないサポート遷移を行う(caniuse.comを参照)ので、あなたは、遷移端に任意のイベントリスナーを添付することができません。

編集: ModernithrのGithubに関するドキュメントを読んで、クロスブラウザのポリフィルページを見つけました。他の多くの有用なリンクの中で、私はこれを見つけましたが、これは小さくても非常に良いtransitionend scriptです。

マインドのGithub README.mdの例では、jQueryのを使用しますが、それはバニラJavaScriptで書かれている通り、ライブラリが実際に無ライブラリ依存関係のないが必要であること。

0

私の要件を満たした適切な「移行期」ポリフィルを見つけることができませんでした。したがって、遷移先を1回フックするためのものが必要な場合は、次のようにしてください:

(function() { 
    var i, 
     el = document.createElement('div'), 
     transitions = { 
      'transition':'transitionend', 
      'OTransition':'otransitionend', // oTransitionEnd in very old Opera 
      'MozTransition':'transitionend', 
      'WebkitTransition':'webkitTransitionEnd' 
     }; 

    var transitionEnd = ''; 
    for (i in transitions) { 
     if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) { 
      transitionEnd = transitions[i]; 
      break; 
     } 
    } 

    Object.prototype.onTransitionEndOnce = function(callback) { 
     if (transitionEnd === '') { 
      callback(); 
      return this; 
     } 
     var transitionEndWrap = function(e) { 
      callback(); 
      e.target.removeEventListener(e.type, transitionEndWrap); 
     }; 
     this.addEventListener(transitionEnd, transitionEndWrap); 
     return this; 
    }; 
}()); 
関連する問題