Цитата:
Цитата:
|
B~Vladi,
Ну вот смотри, Опера поддерживает как mousewheel так и DOMMouseScroll. привожу пример:
function getWheelEvent(){
var eventType='DOMMouseScroll';
var listener=function(){
eventType='myevent';
}
var ele=document.createElement('div');
document.body.appendChild(ele);
if(ele.addEventListener)ele.addEventListener('myevent',listener,false);
else if(ele.attachEvent)ele.attachEvent('onmyevent',listener);
if(document.createEvent&&ele.dispatchEvent){
var evt=document.createEvent('HTMLEvents');
evt.initEvent('myevent',true,true);
ele.dispatchEvent(evt);
}else ele.fireEvent('onmyevent',event);
if(ele.removeEventListener)ele.removeEventListener('myevent',listener,false);
else if(ele.detachEvent)ele.detachEvent('onmyevent',listener);
document.body.removeChild(ele);
return eventType;
}
alert(getWheelEvent());
тут ты получишь myevent потому что функция addEvenetListener по стандартам w3c позволяет создавать собственные события и инициировать их. просто пример по аналогии jQuery
$('div').bind('myevent', function(){
alert("triggered myevent");
});
$('div').trigger('myevent');
тоесть в твоем коде по стандарту initEvent не должен начинаться с префикса on у тебя же оно есть, а событие висит на обычном событие без префикса. |
Цитата:
Цитата:
|
Цитата:
function test( event ) {
var status = false,
elem = document.createElement('div');
document.body.appendChild( elem );
elem.addEventListener( event, function() {
status = true;
}, false);
var evt=document.createEvent('HTMLEvents');
evt.initEvent( event ,true, true );
elem.dispatchEvent( evt );
document.body.removeChild( elem );
return status;
}
alert( test( 'TratataEvent' ) );
alert( test( 'click' ) );
alert( test( 'DOMMouseScroll' ) );
alert( test( 'onmousewheel' ) );
alert( test( 'mousewheel' ) );
Все эти тесты всегда выведут значение true Цитата:
А для ИЕ достаточно сделать такую проверку:
function test( event ) {
var status = false,
elem = document.createElement('div');
document.body.appendChild( elem );
try {
elem.fireEvent( event, document.createEventObject() );
status = true;
} catch ( _ ) {
}
document.body.removeChild( elem );
return status;
}
alert( test( 'onmousewheel' ) );
alert( test( 'onblahtest' ) );
|
B~Vladi,
У вас таки ошибка.
if(ele.addEventListener)ele.addEventListener('mousewheel',listener,false);
var evt=document.createEvent('HTMLEvents');
evt.initEvent('onmousewheel',true,true);
ele.dispatchEvent(evt);
Найдите разницу в 2 символа в создаваемом и запускаемом объекте. Это лишь ИЕ падает на fireEvent, когда пытаешься ему вызвать не существующее событие в браузере. И так, как правильно проверить, в браузере поддерживается mousewheel или DOMMouseScroll
if(document.body.addEventListener){
if('onmousewheel' in document.body || document.body.onmousewheel === null){
// mousewheel event
}else if(window.MouseScrollEvent){
//DOMMouseScroll by Gecko
}else if(window.WheelEvent){
//DOMMouseScroll DOM 3 Events - Webkit support
}else {
//default behavior
//passing 2 events - DOMMouseScroll && mousewheel
}
}else if(window.attachEvent){
//old IE - mousewheel
}else {
//default behavior ...
}
|
Как заметили мне в приват, лучше конечно проверять с начала на существование DOMMouseScroll события :)
|
if ( window.MouseScrollEvent || window.WheelEvent ) {
// Gecko | Webkit
event = "DOMMouseScroll";
} else if ( window.addEventListener ) {
// Opera | IE 9
event = "mousewheel";
} else {
// IE before v9
event = "onmousewheel";
}
|
Цитата:
|
Да ок ок, вы посмотрите какого года этот пост. Кстати, я удалил 2 последние.
|
B~Vladi,
гг, действительно, кто блин такое апает :) |
| Часовой пояс GMT +3, время: 11:36. |