Ранее Ð¼Ñ Ð³Ð¾Ð²Ð¾Ñили о ÑазлиÑнÑÑ
неÑовмеÑÑимоÑÑÑÑ
пÑи ÑабоÑе Ñ ÑобÑÑиÑми Ð´Ð»Ñ IE8-. Ð¡Ð°Ð¼Ð°Ñ Ð³Ð»Ð°Ð²Ð½Ð°Ñ â ÑÑо, конеÑно, назнаÑение ÑобÑÑий пÑи помоÑи attachEvent/detachEvent вмеÑÑо addEventListener/removeEventListener и оÑÑÑÑÑÑвие ÑÐ°Ð·Ñ Ð¿ÐµÑеÑ
ваÑа. Ðо и в Ñамом обÑекÑе ÑобÑÑÐ¸Ñ ÐµÑÑÑ ÑазлиÑиÑ.
ЧÑо каÑаеÑÑÑ ÑобÑÑий мÑÑи, ÑазлиÑÐ¸Ñ Ð² ÑвойÑÑваÑ
можно легко иÑпÑавиÑÑ Ð¿Ñи помоÑи ÑÑнкÑии fixEvent, коÑоÑÐ°Ñ Ð¾Ð¿Ð¸Ñана в ÑÑой главе.
ÐÑа глава и опиÑÐ°Ð½Ð½Ð°Ñ Ð´Ð°Ð»ÐµÐµ ÑÑнкÑÐ¸Ñ fixEvent нÑÐ¶Ð½Ñ ÑолÑко Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки IE8-.
ÐÑли IE8- Ð´Ð»Ñ ÐÐ°Ñ Ð½ÐµÐ°ÐºÑÑален, Ñо пÑолиÑÑÑвайÑе далÑÑе, ÑÑо ÑиÑаÑÑ Ðам не надо.
ФÑнкÑÐ¸Ñ fixEvent пÑедназнаÑена Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка в наÑале обÑабоÑÑика, Ð²Ð¾Ñ Ñак:
elem.onclick = function(event) {
// еÑли IE8-, Ñо полÑÑиÑÑ Ð¾Ð±ÑÐµÐºÑ ÑобÑÑÐ¸Ñ window.event и иÑпÑавиÑÑ ÐµÐ³Ð¾
event = event || fixEvent.call(this, window.event);
...
}
Ðна Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ Ð¾Ð±ÑекÑÑ ÑобÑÑÐ¸Ñ Ð² IE8- ÑледÑÑÑие ÑÑандаÑÑнÑе ÑвойÑÑва:
targetcurrentTargetâ еÑли обÑабоÑÑик назнаÑен не ÑеÑезattachEvent.relatedTargetâ длÑmouseover/mouseoutиmouseenter/mouseleave.pageX/pageYwhich
Ðод ÑÑнкÑии:
function fixEvent(e) {
e.currentTarget = this;
e.target = e.srcElement;
if (e.type == 'mouseover' || e.type == 'mouseenter') e.relatedTarget = e.fromElement;
if (e.type == 'mouseout' || e.type == 'mouseleave') e.relatedTarget = e.toElement;
if (e.pageX == null && e.clientX != null) {
var html = document.documentElement;
var body = document.body;
e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
e.pageX -= html.clientLeft || 0;
e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
e.pageY -= html.clientTop || 0;
}
if (!e.which && e.button) {
e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0));
}
return e;
}
ÐÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°, еÑли не иÑполÑзÑÑÑÑÑ JavaScript-ÑÑеймвоÑки, в коÑоÑÑÑ ÐµÑÑÑ Ñвои ÑÑедÑÑва ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÑоÑÑ-бÑаÑзеÑнÑÑ ÑазлиÑий.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)