IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

IE8 > drag qui aggrandit la zone affichable pourtant en overflow hidden


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 44
    Par défaut IE8 > drag qui agrandit la zone affichable pourtant en overflow hidden
    Bonjour.

    Ma zone affichable <body> s'agrandit sous IE8 lorsque je tente de déplacer mon élément hors de celle ci, malgré l'overflow hidden. Je n'ai pourtant pas ce souci sous FF, Opera, IE6, IE7....

    Est-ce que quelqu'un pourrait m'aiguiller sur ce point ? (je flanche après des heures de recherche...)


    Ci joint, un code exemple simplifié, pour voir ce que ca donne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
    	<!--<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />-->
     
    	<style type="text/css">
    		html, body { overflow: hidden; margin: 0; padding: 0; height: 100%; }
    		html { position: absolute; z-index: 0; width: 1000px; max-width: 1000px; border: 1px solid blue; }
    		body { position: relative; z-index: 1; width: 900px; max-width: 900px; border: 1px solid green; }
    		#bloc { position: absolute; z-index: 2; height: 500px; width: 500px; background: red; }
    		#testBug { font: 40px Trebuchet MS, Verdana; }
    	</style>
     
    	<script type="text/javascript">
    		function addEvent(obj, event, fct) {
    			if (obj.attachEvent)  { obj.attachEvent("on" + event, fct);  }
    			else { obj.addEventListener(event, fct, true); }
    		}
     
    		var curX = 0;
    		var curY = 0;
     
    		function getPos (e) {
    			curX = e.clientX;
    			curY = e.clientY;
    			if (dragging) { return false; }
    		}
     
    		addEvent(document, 'mousemove', getPos);
     
    		var elt = '';
    		var dragging = false;
    		var dragInterval = '';
    		var decalX = 0;
    		var decalY = 0;
    		var nextPosX = 0;
    		var nextPosY = 0;
    		var onDrag = '';
     
    		function dragElt (elt) {
    			if (elt) {
    				if (!(elt.style.top)) { elt.style.top = 0 +'px'; }
    				if (!(elt.style.left)) { elt.style.left = 0 +'px'; }
    				if (!dragging) {
    					dragging = true;
    					decalX = curX - parseInt(elt.offsetLeft);
    					decalY = curY - parseInt(elt.offsetTop);
    					onDrag = function() {
    						nextPosX = curX - decalX;
    						nextPosY = curY - decalY;
    						if (nextPosY <= 0) { nextPosY = 0; }
    						elt.style.left = nextPosX + 'px';
    						elt.style.top = nextPosY + 'px';
    						elt.focus();
    					};
    					dragInterval = setInterval(onDrag, 10);
    				}
    			}
    			else {
    				dragging = false;
    				clearInterval(dragInterval);
    			}
    		}
    	</script>
     
    	<title>Area 404</title>
    </head>
     
    <body id="top">
     
    	<div id="testBug">testBug</div>
     
    	<div id="bloc" onmousedown="dragElt(this); this.style.cursor = 'move';" onmouseup="dragElt(); this.style.cursor= 'auto';">yop</div>
     
    </body>
    </html>

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    en general un drag drop passe l'objet en positioin absolute et en z-index de premier plan, cherche peut être de ce coté là ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 44
    Par défaut
    Les éléments de l'exemple utilisent bien ces propriétés (position, z-index). Le overflow hidden ne fait-il que cacher les scrollbars pour <body> et <html> sous IE8 ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    jour

    apparement c'est le focus que ie a du mal a interprete

    elt.focus

    essai le code j'y ai apporte qq modifs surtout au niveau des variables globales il y en avaient trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
     
     <style type="text/css">
      html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; }
      #page { position: relative; z-index: 0; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; }
      #bloc { position: absolute; z-index: 1; height: 200px; width: 200px; background: red; cursor: move }
     </style>
     
     <script type="text/javascript">
      function addEvent(obj, event, fct) {
       if (obj.attachEvent)  { obj.attachEvent("on" + event, fct);  }
       else { obj.addEventListener(event, fct, true); }
      }
     
      var curX = 0;
      var curY = 0;
     
      function getPos (e) {
       curX = e.clientX;
       curY = e.clientY;
       if (dragging) { return false; }
      }
     
      addEvent(document, 'mousemove', getPos);
     
      var dragging = false;
      var onDrag = '';
     
      function dragElt (elt) {
       if (elt) {
        if (!(elt.style.top)) { elt.style.top = 0 +'px'; }
        if (!(elt.style.left)) { elt.style.left = 0 +'px'; }
        if (!dragging) {
         dragging = true;
         var decalX = curX - parseInt(elt.style.left);
         var decalY = curY - parseInt(elt.style.top);
         onDrag = function() {
          var nextPosX = curX - decalX;
          var nextPosY = curY - decalY;
          if (nextPosY <= 0) { nextPosY = 0; }
          elt.style.left = nextPosX + 'px';
          elt.style.top = nextPosY + 'px';
           };
         dragInterval = setInterval(onDrag, 10);
        }
       }
       else {
        dragging = false;
        clearInterval(dragInterval);
       }
      }
     </script>
     
     <title>Area 404</title>
    </head>
     
    <body id="top">
     
     <div id="page">
     
      <div id="testBug">testBug</div>
     
      <div id="bloc" onmousedown="dragElt(this)"onmouseup="dragElt()">azea</div>
     
     </div>
     
    </body>
    </html>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 44
    Par défaut
    Ah, en effet ! Faudra que je regarde ca de plus près concernant le focus d'un éléménet dans un bloc en oveflow hidden avec IE8.

    Sinon en donnant le focus au <body>, ca marche aussi (même si c'est à l'élément que j'aurais voulu le donner).


    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/02/2008, 14h08
  2. drag and drop sur zone de texte hypertexte
    Par lafontaine dans le forum IHM
    Réponses: 2
    Dernier message: 07/01/2008, 14h19
  3. Menu déroulant qui ne reste pas affiché sous ie6
    Par melanoche dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/12/2007, 15h08
  4. Drag&Drop entre deux zones de liste
    Par Herman dans le forum IHM
    Réponses: 1
    Dernier message: 28/06/2007, 19h14
  5. Savoir si un point est dans la zone affiché
    Par nicoenz dans le forum OpenGL
    Réponses: 6
    Dernier message: 08/12/2006, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo