Как проверить, поддерживается ли событие?
Например, animationend поддерживается не всеми браузерами (может и ни одним). Поэтому приходится применять такие события, как webkitanimationend и пр. Если одновременно добавлять и обычное событие и событие с вендорным префиксом, боюсь, в один прекрасный момент, они будут срабатывать оба.
|
if ( document.body.onanimationend === null ) { alert( "support" ); } else { alert( "unsupport" ); } if ( document.body.onclick === null ) { alert( "support" ); } else { alert( "unsupport" ); } |
И? document.createElement('div').onwebkitanimationend выдает null.
|
Цитата:
все просто: var event = document.createElement('div').onanimationend === null ? 'animationend' : 'webkitanimationend'; addEventListener( event, function(){}, false); |
Цитата:
Цитата:
|
зачем несколько событий, ешкин макорошкин... всеж по русски объясняю..
ты задал вопрос как узнать поддерживает браузер оригинальное событие или нет... тепер пишешь простую функцию инициализации библиотеки: eventNames = (function(){ var conf ={}, div = document.createElement('div'); conf.animationend = div.onanimationend === null ? 'animationend' : 'webkitanimationend'; conf.какойтотамевент = div.onкакойтотамевент === null ? 'какойтотамевент' : 'webkitкакойтотамевент'; conf.какойтотамевент2 = div.onкакойтотамевент2 === null ? 'какойтотамевент2' : 'webkitкакойтотамевент2'; div = null; return conf; }()); а теперь спокойно юзаешь: elem.addEventListener( eventNames.какойтотамевент, function(){ }, false); elem.addEventListener( eventNames.animationend, function(){ }, false);и тд |
trikadin,
ну не знаю, у меня в опере норм выдает |
Еще раз объясняю, onwebkitanimationend выдаёт undefined, хотя через addEventListener поддерживается.
|
Цитата:
|
Цитата:
|
можно еще так проверить:
eventNames = (function(){ var conf ={ animationend: 'webkitanimationend' }, div = document.createElement('div'); div.addEvenetListener( 'animationend', function(){ conf.animationend = 'animationend'; }, false ); var o = document.createEvent( 'Events' ); o.initEvent( 'animationend', false, false ); div.dispatchEvent( o ); div = null; return conf; }()); |
ну там потом после диспатча еще и удалить событие и т.д. но принцип должен быть понятен
|
Цитата:
|
Цитата:
|
devote,
Это не докажет существование события. Так можно вызвать любое событие. |
Цитата:
|
Цитата:
|
ну значит не диспатчить, а организовать микроанимацию... короче заставить браузер выполнить событие...
|
Угу, изначально так подумал, но это идиотизм.
|
Цитата:
|
FINoM, короче, вам проще узнавать версию и проверять, поддерживается ли в этой версии нужная вам ф-ция))
|
ну например в веб ките можно проверить так:
window.WebKitAnimationEvent в опере видимо так document.body.onanimationend в фф ещё не придумал как |
Цитата:
|
Цитата:
|
Цитата:
|
devote,
такая фишка проканает только в вебкит к сожалению, так же как с HashChangeEvent |
FINoM, ну, вообще, это была ирония, показывающая, что все остальные способы так же нестабильны/неточны/ресурсо-, энерго-, кодоёмки.
|
FINoM,
это инстанс для события - http://developer.apple.com/library/s...tionEvent.html И даже если называть его как вы - классом, то это класс который создаёт экземпляры объекта события. Если его нет то и события не будет. |
UPD:
Firefox: window.AnimationEvent |
Цитата:
|
В общем виде выглядит как то так:
if(window.AnimationEvent || 'onanimationend' in document.body || document.body.onanimationend === null){ //oh yeah.. }else if(window.VendorAnimationEvent){ // oh.. not so bad }else { //fuck, no.. } document.body меня на что то другое :) |
Nekromancer, ок, спасибо попробую.
Какие еще мобильные браузеры могут быть? IE, Opera, Mozilla? |
Nekromancer, ну тогда уж так:
if(window.AnimationEvent || 'onanimationend' in document.body || document.body.onanimationend === null){ //oh yeah.. }else if(window.VendorAnimationEvent){ // oh.. not so bad }else if (true) { //fuck, no.. } else { //oh, shi... } |
trikadin, какой-то юмор у тебя непонятный
|
FINoM,
IE мёртвый на мобилах ещё. Dolphin и всё такое вроде как тоже WebKit. Наверно есть ещё всякие PSP/Blackberry браузеры :) |
Цитата:
|
} else { // panic ... } |
if(window.AnimationEvent || 'onanimationend' in document.body || document.body.onanimationend === null){ //oh yeah.. }else if(window.VendorAnimationEvent){ // oh.. not so bad }else if (true) { //fuck, no.. } else { var t = 'FFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU' document.write(t) alert(t) } |
Цитата:
|
trikadin, шутка сугубо программистическая, пацаны не поймут.
|
Часовой пояс GMT +3, время: 01:07. |