Как проверить, поддерживается ли событие?
Например, 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, время: 18:09. |