Мне просто пришлось написать очень похожий код для использования с tipsy (поэтому мое решение использует jQuery). Вот основная математика, предполагая, что <div id="mydiv">...</div>
- это div, с которым вы работаете. Я учитываю высоту и ширину div при измерении расстояний до правого и нижнего края.
dTop
, dBottom
, dLeft
и dRight
- это расстояние от верхнего, нижнего, левого и правого краев элемента, соответственно, до одного и того же края области просмотра. Если вы хотите измерять на основе левого верхнего угла div, не вычитайте dTop
или dLeft
при вычислении dBottom
и dRight
.
var $doc = $(document),
$win = $(window),
$this = $('#mydiv'),
offset = $this.offset(),
dTop = offset.top - $doc.scrollTop(),
dBottom = $win.height() - dTop - $this.height(),
dLeft = offset.left - $doc.scrollLeft(),
dRight = $win.width() - dLeft - $this.width();