Я собираю простой сценарий jQuery, который позволяет мне компенсировать элемент, основанный на том, как далеко за пределами области просмотра. Другими словами, столкновение объекта (div) с окном просмотра. То, что я собрал до сих пор, прекрасно работает с использованием position: fixed
, но отключено на 34 пикселя, если используется position: absolute;
, что, я думаю, связано с вертикальной полосой прокрутки браузера * 2. Неважно, так или нет, я не знаю, как чтобы компенсировать это.Почему позиция абсолютная и фиксированная позиция дает разные показания?
Возможно, у кого-то есть идея, как я могу исправить это другое чтение?
я собрал jsfiddle, который можно просмотреть здесь: https://jsfiddle.net/pegues/m1zg5p4c/1/
В jsfiddle, вы можете увидеть в области просмотра «Off-экран X: -133`. Для значения должно быть -150. Если вы измените значение css для .box в строке 13 на фиксированное, вы увидите правильное положение красного блока и снизу в нижней и правой части экрана, а значение Off-screen X будет равно -150.
Возможно, существует какой-то принцип с тем, как фиксированные или абсолютные работы, о которых я пропустил или забыл?
elemCollision($('.box'));
function elemCollision(el) {
// Viewport Width and Height
var viewportW = window.innerWidth;
var viewportH = window.innerHeight;
// Element Width and Height
var width = el.innerWidth();
var height = el.innerHeight();
// Element Position: top, right, bottom, left
var top = el.offset().top;
var left = el.offset().left;
var right = (viewportW - left) + viewportW;
var bottom = (viewportH - top) + viewportH;
// Amount Element is Off Screen
var offScreenX = (viewportW - left) - width;
var offScreenY = (viewportH - top) - height;
// Position Element 100% on Screen
var placementX = (viewportW - left) - Math.abs(offScreenX);
var placementY = (viewportH - top) - Math.abs(offScreenY);
// Assign New X and Y Placement Values
$('.box').css({ bottom: placementY, right: placementX });
$('body').append(
'<div style="padding: 10px; font-size: 0.80em; line-height: 1.25em;">-----' + '<br/>' +
'Placement Top: ' + top + '<br/>' +
'Placement Right: ' + right + '<br/>' +
'Placement Bottom: ' + bottom + '<br/>' +
'Placement Left: ' + left + '<br/>' +
'Box Width: ' + width + '<br/>' +
'Box Height: ' + height + '<br/>' +
'Viewport Width: ' + viewportW + '<br/>' +
'Viewport Height: ' + viewportH + '<br/>' +
'Off-screen X: ' + offScreenX + '<br/>' +
'Off-screen Y: ' + offScreenY + '<br/>' +
'New Placement X: ' + placementX + '<br/>' +
'New Placement Y: ' + placementY + '<br/>' +
'-----</div>'
);
}
Мое значение для 'Off-screen X' отличается от того, что вы говорите, но ширина полосы прокрутки должна составлять разницу для того, что должно быть. –
Спасибо, Ник. Ваше решение дает мне и объяснение, и что-то, с чем можно работать, имея возможность достичь нужного мне результата. – Pegues
@Pegues рада помочь вам! –