Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как проверить, поддерживается ли событие? (https://javascript.ru/forum/misc/24446-kak-proverit-podderzhivaetsya-li-sobytie.html)

FINoM 30.12.2011 04:47

Как проверить, поддерживается ли событие?
 
Например, animationend поддерживается не всеми браузерами (может и ни одним). Поэтому приходится применять такие события, как webkitanimationend и пр. Если одновременно добавлять и обычное событие и событие с вендорным префиксом, боюсь, в один прекрасный момент, они будут срабатывать оба.

devote 30.12.2011 04:57

if ( document.body.onanimationend === null ) {
    alert( "support" );
} else {
   alert( "unsupport" );
}

if ( document.body.onclick === null ) {
    alert( "support" );
} else {
   alert( "unsupport" );
}

FINoM 30.12.2011 05:21

И? document.createElement('div').onwebkitanimationend выдает null.

devote 30.12.2011 05:25

Цитата:

Сообщение от FINoM
И? document.createElement('div').onwebkitanimationend выдает null.

И правильно делает что выдает, если по умалчанию имеет значение null значит такое свойство браузер держит, если undefined значит не держит.

все просто:

var event = document.createElement('div').onanimationend === null ? 'animationend' : 'webkitanimationend';
addEventListener( event, function(){}, false);

FINoM 30.12.2011 05:28

Цитата:

Сообщение от devote
И правильно делает что выдает, если по умалчанию имеет значение null значит такое свойство браузер держит, если undefined значит не держит.

Тьфу блин, не null a undefuned.
Цитата:

Сообщение от devote
все просто:

Предлагаешь для одного лишь animationend вешать обработчики на насколько событий с вендорными префиксами, не проверяя поддерживаются ли эти события?

devote 30.12.2011 05:35

зачем несколько событий, ешкин макорошкин... всеж по русски объясняю..

ты задал вопрос как узнать поддерживает браузер оригинальное событие или нет... тепер пишешь простую функцию инициализации библиотеки:

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);
и тд

devote 30.12.2011 05:37

trikadin,
ну не знаю, у меня в опере норм выдает

FINoM 30.12.2011 05:37

Еще раз объясняю, onwebkitanimationend выдаёт undefined, хотя через addEventListener поддерживается.

devote 30.12.2011 05:37

Цитата:

Сообщение от trikadin
devote, а ваш пример у меня в обоих случаях "unsupport" выдаёт))

просто мне это не нужно было никогда, поэтому на вскидку щас примеры показываю

devote 30.12.2011 05:39

Цитата:

Сообщение от FINoM
Еще раз объясняю, onwebkitanimationend выдаёт undefined, хотя через addEventListener поддерживается.

ну может он как-то подругому прописан, в файрбаге то посмотрите


Часовой пояс GMT +3, время: 11:24.