我正在为我正在使用的div设置scrollTop和scrollLeft。
代码如下所示:
div.scrollLeft = content.cx*scalar - parseInt(div.style.width)/2;
div.scrollTop = content.cy*scalar - parseInt(div.style.height)/2;
这在FF中运行得很好,但只有scrollLeft在chrome中工作。正如你所看到的,两者使用几乎相同的方程式,因为它在FF中工作我只是想知道这是否是Chrome的问题?
更新 如果我切换分配的顺序,那么scrollTop将起作用,而scrollLeft则不会。
<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 :(得分: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>
这解决了我的问题。问题是onscroll被调用两次,因为我正在更改scrollLeft和scrollTop。最初我写这篇文章的目的是使用scrollTo,它可以在一次调用中完成两个滚动。我不太清楚为什么我的原始代码现在在FF / Opera中运行...