2010-03-30 9 views
0

Je configure scrollTop et scrollLeft pour un div avec lequel je travaille.Y a-t-il un problème avec scrollTop dans Chrome?

Le code ressemble à ceci:

div.scrollLeft = content.cx*scalar - parseInt(div.style.width)/2; 
div.scrollTop = content.cy*scalar - parseInt(div.style.height)/2; 

Cela fonctionne très bien dans FF, mais seulement scrollLeft fonctionne en chrome. Comme vous pouvez le voir, les deux utilisent des équations presque identiques et comme cela fonctionne dans FF je me demande simplement si c'est un problème avec Chrome?

Mise à jour: Si je change l'ordre des affectations alors scrollTop fonctionnera et scrollLeft ne le fera pas.

<div id="container" style = "height:600px; width:600px; overflow:auto;" onscroll = "updateCenter()"> 
<script> 
    var div = document.getElementById('container'); 

    function updateCenter() 
    { 
     svfdim.cx = (div.scrollLeft + parseFloat(div.style.width)/2)/scalar; 
     svfdim.cy = (div.scrollTop + parseFloat(div.style.height)/2)/scalar; 
    } 

    function updateScroll(svfdim, scalar, div) 
    { 
     div.scrollTop = svgdim.cy*scalar - parseFloat(div.style.height)/2; 
     div.scrollLeft = svgdim.cx*scalar - parseFloat(div.style.width)/2; 
    } 

    function resizeSVG(Root) 
    { 
     Root.setAttribute("height", svfdim.height*scalar); 
     Root.setAttribute("width", svfdim.width*scalar);  
     updateScroll(svgdim, scalar, div); 
    } 
</script> 
+0

Que se passe-t-il si votre magasin les 4 dimensions dans des variables avant de modifier les propriétés de div? – Alsciende

+0

Quelles sont les 4 dimensions? – Shaunwithanau

+0

les deux lignes que vous avez posté semblent bien. inclure html et plus du script avec lequel vous travaillez. – lincolnk

Répondre

0
<body onload="resizeSVG(Root)" background="gray"> 
<script> 
var prescrollLeft = 0; 
var prescrollTop = 0; 

function updateCenter() 
{ 
    if(div.scrollLeft != prescrollLeft) 
    { 
     svgdim.cx = (div.scrollLeft + parseFloat(div.style.width)/2)/scalar; 
    } 
    if(div.scrollTop != prescrollTop) 
    { 
    svgdim.cy = (div.scrollTop + parseFloat(div.style.height)/2)/scalar; 
    } 

    prescrollLeft = div.scrollLeft; 
    prescrollTop = div.scrollTop; 
} 

function updateScroll(svfdim, scalar, div) 
{ 
    div.scrollTop = svfdim.cy*scalar - parseFloat(div.style.height)/2; 
    div.scrollLeft = svfdim.cx*scalar - parseFloat(div.style.width)/2; 
} 

function resizeSVG(Root) 
{ 
    Root.setAttribute("height", svfdim.height*scalar); 
    Root.setAttribute("width", svfdim.width*scalar);  
    updateScroll(svfdim, scalar, div); 
} 
</script> 

<div id="container" style = "height:600px; width:600px; overflow:auto;" onscroll = "updateCenter()" > 
//some SVG 
</div> 

que ce soit réglé mon problème. Le problème était que onscroll est appelé deux fois depuis que je change scrollLeft et scrollTop. A l'origine j'ai écrit ceci avec l'intention d'utiliser scrollTo qui aurait fait défiler les deux en un seul appel. Je ne suis pas tout à fait sûr pourquoi mon code original a fonctionné dans FF/Opera maintenant ...