MediaWiki:Gadget-MoveResizeFixed.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./* <noinclude>
Fonctions standards pour gérer des éléments en position fixed :
* fonction "move",
* fonction "resize"
Voir page de discussion.</noinclude>
== CODES SOURCE ==
<!--
*/
/* -->
=== FONCTION : navigateur ===
* Renvoie true si le navigateur est Internet Explorer
<!--
*/
// --><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>
function MoveResizeFixed_NavIsIE(){
var agt=navigator.userAgent.toLowerCase();
var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
return is_ie;
}
//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : largeur de l'écran ===
* Renvoie la largeur de l'écran (en pixels)
<!--
*/
// --><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>
function MoveResizeFixed_GetScreenWidth(){
if(MoveResizeFixed_NavIsIE()){
var ScreenWidth = parseInt(screen.width);
}else{
var ScreenWidth = parseInt(window.innerWidth);
}
return ScreenWidth;
}
//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : hauteur de l'écran ===
* Renvoie la hauteur de l'écran (en pixels)
<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>
function MoveResizeFixed_GetScreenHeight(){
if(MoveResizeFixed_NavIsIE()){
var ScreenHeight = parseInt(screen.height);
}else{
var ScreenHeight = parseInt(window.innerHeight);
}
return ScreenHeight;
}
//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : MOVE ===
Transforme un élément en ancre pour bouger un autre élément (en position fixed)
* elementArea = élément ancre (obligatoire)
* elementsToMove = éléments à bouger (obligatoire, dans une Array)
* LeftLimit = limite gauche, en pixel (facultatif)
* TopLimit = limite haut, en pixel (facultatif)
<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>
function MoveResizeFixed_AddMoveArea(elementArea, elementsToMove, LeftLimit, TopLimit){
if((!elementArea)||(!elementsToMove)) return;
elementArea.onmousedown=function(event) {
monbody = document.body;
if(!event) { event = window.event; }
if(MoveResizeFixed_NavIsIE()){
positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
}else{
positionSouris_X = parseInt( event.clientX );
positionSouris_Y = parseInt( event.clientY );
}
for(var a=0;a<elementsToMove.length;a++){
elementsToMove[a].initialX = parseInt( positionSouris_X - elementsToMove[a].offsetLeft);
elementsToMove[a].initialY = parseInt( positionSouris_Y - elementsToMove[a].offsetTop);
}
monbody.onmousemove = function(event) {
if(!event) { event = window.event; }
if(MoveResizeFixed_NavIsIE()){
positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
}else{
positionSouris_X = parseInt( event.clientX );
positionSouris_Y = parseInt( event.clientY );
}
for(var a=0;a<elementsToMove.length;a++){
PositionGauche = parseInt( positionSouris_X ) - elementsToMove[a].initialX;
PositionHaut = parseInt(positionSouris_Y ) - elementsToMove[a].initialY;
if(LeftLimit){
if( PositionGauche < LeftLimit){
PositionGauche = LeftLimit;
}
}
if(TopLimit){
if( PositionHaut < TopLimit){
PositionHaut = TopLimit;
}
}
elementsToMove[a].style.left = PositionGauche + 'px';
elementsToMove[a].style.top = PositionHaut + 'px';
elementsToMove[a].style.opacity = '.8';
}
}
monbody.onmouseup=function(event) {
for(var a=0;a<elementsToMove.length;a++){
elementsToMove[a].style.opacity = '';
}
monbody.onmousemove = null;
monbody.onmouseup = null;
}
}
elementArea.style.cursor = "move";
}
//</nowiki></pre></source></div><!--
/*
-->
=== FONCTION : RESIZE ===
Transforme un élément en ancre pour redimensionner un autre élément (en position fixed)
* elementArea = élément ancre (obligatoire)
* elementsToResize = élément à redimensionner (obligatoire, dans une Array)
* MinWidth = largeur minimum, en pixel (facultatif)
* MinHeight = hauteur minimum, en pixel (facultatif)
<!--
*/
//--><div style="border:1px dashed green;margin:1em;padding:1em;"><source lang=javascript>
//<pre><nowiki>
function MoveResizeFixed_AddResizeArea(elementArea, elementsToResize, MinWidth, MinHeight){
if((!elementArea)||(!elementsToResize)) return;
elementArea.onmousedown = function(event){
monbody = document.body;
if(!event) { event = window.event; }
if(MoveResizeFixed_NavIsIE()){
positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
}else{
positionSouris_X = parseInt( event.clientX );
positionSouris_Y = parseInt( event.clientY );
}
for(var a=0;a<elementsToResize.length;a++){
elementsToResize[a].initialWidth = parseInt( positionSouris_X - elementsToResize[a].offsetWidth );
elementsToResize[a].initialHeight = parseInt( positionSouris_Y - elementsToResize[a].offsetHeight );
elementsToResize[a].style.opacity = '.8';
}
monbody.onmousemove=function(event) {
if(!event) { event = window.event; }
if(MoveResizeFixed_NavIsIE()){
positionSouris_X = parseInt( event.clientX + monbody.scrollLeft );
positionSouris_Y = parseInt( event.clientY + monbody.scrollTop );
}else{
positionSouris_X = parseInt( event.clientX );
positionSouris_Y = parseInt( event.clientY );
}
for(var a=0;a<elementsToResize.length;a++){
var NewWidth = parseInt( positionSouris_X - elementsToResize[a].initialWidth );
if(MinWidth){
if(NewWidth<MinWidth) NewWidth = MinWidth;
}
var NewHeight = parseInt( positionSouris_Y - elementsToResize[a].initialHeight );
if(MinHeight){
if(NewHeight<MinHeight) NewHeight = MinHeight;
}
elementsToResize[a].style.width = NewWidth + 'px';
elementsToResize[a].style.height = NewHeight + 'px';
}
}
monbody.onmouseup=function(event) {
for(var a=0;a<elementsToResize.length;a++){
elementsToResize[a].style.opacity = '';
}
monbody.onmousemove = null;
monbody.onmouseup = null;
}
}
elementArea.style.cursor = "se-resize";
}
//</nowiki></pre></source></div>