は、残念ながら、最善のアプローチはevent.propertyName
REALLYは、あなたが探している性質であることを確認することであると思われるtransitionend
イベントのブラウザ実装の異種の状態を与えられました。これは、移行すべきプロパティのマップを含む既知のobject
またはstring
と照合することによって行うことができます。現在使用しているソリューション:
function transitionEndHandler(event) {
if(
(
(event.propertyName in event.target.style) &&
// BLESS CHROME'S HEART THIS IS ALL I NEED TO CHECK FOR THEM
(event.target.style.cssText.indexOf(event.propertyName) !== -1)
// FIREFOX WILL PASS THIS CONDITION, AS IT DOESN'T THROW EVENTS FOR PROPERTIES YOU DIDN'T SPECIFICALLY BIND
) ||
(
(event.propertyName.replace(/-([a-z])/gi, function(s, group1) {
// OPERA SURE DOESN'T WANT TO MAKE THIS EASY, IT WONT FIND A 'margin-left' in STYLE
// SO I HAVE TO LOOK FOR 'marginLeft' INSTEAD THIS MAKES event.propertyName and event.target.style
// ESSENTIALLY USELESS INSIDE THE TRANSITIONEND EVENT HANDLER
return group1.toUpperCase();
}) in event.target.style) &&
(event.target.style.cssText.indexOf(event.propertyName) !== -1)
// AGAIN WE HAVE TO CHECK TO MAKE SURE WE ACTUALLY 'SET' THIS STYLE PROPERTY ON THE ELEMENT
// AS OPERA THROWS AN TRANSITIONEND EVENT FOR opacity WHEN YOU SET marginLeft
)
) {
// THIS EVENT.PROPERTYNAME, IS ACTUALLY A PROPERTY I TRANSITIONED,
// NOT JUST ANY PROPERTY THE BROWSER DECIDED IT WANTED TO TRANSITION FOR ME
}
}
具体的にお聞かせください。この_unrelated_プロパティをアニメーション化すると、正確に何が得られましたか?あなたは何のことをしていたのですか?私はオペラにいくつかの問題がありました。 – bodine