Je suis confronté au problème de la compatibilité des navigateurs avec un script de "fausse popup" à base de calque, déplaçable avec la souris.
J'ai trouvé un script qui fonctionne, le voici (l'id de mon calque est 'recherche_plus') :
var NS4 = (document.layers)? true:false;
var IE4 = (document.all)? true:false;
var DOM = (document.getElementById)? true:false;
function init_drag()
{
var h=0;
if(IE4)
{
var w = document.body.clientWidth-200;
recherche_plus.style.left = w;
recherche_plus.style.top = h;
recherche_plus.onmousedown = dbt_drag;
}
else if(DOM)
{
var w = window.outerWidth-200;
document.getElementById('recherche_plus').style.left = w;
document.getElementById('recherche_plus').style.top = h;
document.getElementById('recherche_plus').addEventListener('mousedown', dbt_drag, false);
}
else if(NS4)
{
var w = window.outerWidth-200;
document.layers.recherche_plus.left = w;
document.layers.recherche_plus.top = h;
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = dbt_drag;
}
}
function drag(e)
{
if(IE4)
{
var difX = event.clientX - window.lastX;
var difY = event.clientY - window.lastY;
var newX1 = parseInt(recherche_plus.style.left) + difX;
var newY1 = parseInt(recherche_plus.style.top) + difY;
recherche_plus.style.left = newX1 + "px";
recherche_plus.style.top = newY1 + "px";
window.lastX = event.clientX;
window.lastY = event.clientY;
}
else if(DOM)
{
var difX = e.clientX - window.lastX;
var difY = e.clientY - window.lastY;
var newX1 = parseInt(document.getElementById('recherche_plus').style.left) + difX;
var newY1 = parseInt(document.getElementById('recherche_plus').style.top) + difY;
document.getElementById('recherche_plus').style.left = newX1 + "px";
document.getElementById('recherche_plus').style.top = newY1 + "px";
window.lastX = e.clientX;
window.lastY = e.clientY;
}
else if(NS4)
{
var difX = e.pageX - window.lastX;
var difY = e.pageY - window.lastY;
var newX1 = parseInt(document.layers.recherche_plus.left) + difX;
var newY1 = parseInt(document.layers.recherche_plus.top) + difY;
document.layers.recherche_plus.left = newX1;
document.layers.recherche_plus.top = newY1;
window.lastX = e.pageX;
window.lastY = e.pageY;
}
}
function dbt_drag(e)
{
if(IE4)
{
window.lastX = event.clientX;
window.lastY = event.clientY;
document.onmousemove = drag;
document.onmouseup = fin_drag;
}
else if(DOM)
{
window.lastX = e.clientX;
window.lastY = e.clientY;
window.onmousemove = drag;
window.onmouseup = fin_drag;
}
else if(NS4)
{
window.lastX = e.pageX;
window.lastY = e.pageY;
document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = drag;
document.captureEvents(Event.MOUSEUP)
document.onmouseup = fin_drag;
}
}
function fin_drag(e)
{
if(IE4 || NS4)
{
document.onmousemove = null;
}
else if(DOM)
{
window.onmousemove = null;
}
}
Voilà, ça fonctionne. Mais j'ai deux questions :1 - Comment faire pour que cette fonction puisse être généralisée à d'autres cadres ?
2 - J'utilise Internet Explorer 6, et pourtant avec ce script mon navigateur est détecté comme IE4. Comment cela se fait-il ? Pourtant, dans d'autres javascripts, j'utilise la syntaxe document.getElementById('id') - qui renvoie a priori à DOM - et ça fonctionne. Je suis un peu paumé en fait