В некоторых версиях IE имеется тонкая граница размером 2 пикселя, окружающая порт просмотра документа.Я еще не заметил этого для других браузеров.Это создает небольшую проблему при расчете позиций мыши для страницы и клиентских областей.Первоначально я просто вычитал 2 из каждого вычисления, чтобы учесть границу.
Но потом, когда я тестировал его в разных версиях IE и разных программах встраивания IE, я заметил, что в некоторых случаяхбез границ.Итак, простая проверка IE и вычитание 2. не обрежут его.
Есть ли способ получить границу порта просмотра документа в IE?
Example1: определение положения мыши внутри объекта
<html>
<head>
<script>
var isIE = (!window.addEventListener);
window.onload = function(){
var foo = document.getElementById('foo');
if (isIE) foo.attachEvent('onmousemove',check_coords);
else foo.addEventListener('mousemove',check_coords,false);
}
function check_coords(e){
var foo = document.getElementById('foo');
var objPos = getPos(foo);
if (isIE) mObj = [window.event.clientX+document.body.scrollLeft-objPos[0], window.event.clientY+document.body.scrollTop-objPos[1]];
else mObj = [e.pageX-objPos[0], e.pageY-objPos[1]];
foo.innerHTML = mObj;
}
function getPos(obj){
var pos = [0,0];
while (obj.offsetParent){
pos[0] += obj.offsetLeft;
pos[1] += obj.offsetTop;
obj = obj.offsetParent;
}
return pos;
}
</script>
<style>
body{
margin:0px;
padding:0px;
}
#foo{
border:3px solid black;
position:absolute;
left:30px;
top:52px;
width:300px;
height:800px;
background-color:yellow;
}
</style>
</head>
<body>
<div id='foo'>Test test</div>
</body>
</html>
При координате [0,0] Internet Explorer (тот, у которого есть граница) возвращает [2,2]
Пример 2: получение ширины полосы прокрутки
alert(screen.width-document.body.clientWidth);
При ширине полосы прокрутки 17px Internet Explorer (версии с рамкой) возвращает 21px, не учитывая границы в 2px с каждой стороны.
UPDATE: Итак, я думаю, что на самом деле был стилем по умолчанию, который применяется к тегу body.Извините ребята!Первоначально я сделал document.body.style.borderWidth
, чтобы проверить, был ли это стиль CSS.Но пару минут назад я только что понял, что должен был сделать document.body.currentStyle['borderWidth']
.Это возвращает medium
.Таким образом, для правильного получения границы окна просмотра без изменения страницы (это ТОЛЬКО относится к вычислениям IE), вам нужно будет использовать .currentStyle['borderWidth']
.Сценарий, кажется, работает во всех других браузерах, кроме IE, без выполнения проверки границы (насколько я проверял).Кроме того, вам нужно только проверить для borderWidth в IE-padding или поле не имеет значения.Кроме того, при вычитании ширины границ убедитесь, что вы проверяете borderTopWidth
И borderLeftWidth
.
В любом случае, я присудил Сэмюэлю награду, так как он первым упомянул, что это может быть по умолчаниюстиль браузера.