Как узнать, переполняется ли элемент (с помощью jQuery)? - PullRequest
16 голосов
/ 29 июля 2011

Макет выглядит так:

enter image description here

По сути, все, что мне нужно, это выяснить, вышел ли ЭЛЕМЕНТ за СТРАНИЦУ :))

Все, что я знаю, это ширина страницы, которая фиксирована @ 900 px ...

Ответы [ 4 ]

13 голосов
/ 29 июля 2011

Рассчитайте width элемента, затем получите его left, наконец вычтите его на width страницы, и вы получите переполнение.

var pageWidth = $(".page").width();
var elementWidth = $(".element").width();
var elementLeft = $(".element").position().left;

if (pageWidth - (elementWidth + elementLeft) < 0) {
  alert("overflow!");
} else {
  alert("doesn't overflow");
}
.page {
  overflow: hidden;
  width: 200px;
  height: 200px;
  position: relative;
  background: black;
}

.element {
  width: 100px;
  height: 100px;
  position: absolute;
  background: blue;
  top: 10px;
  left: 150px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="page">
  <div class="element">
  </div>
</div>

Пример здесь: http://jsfiddle.net/jackJoe/Q5FdG/

3 голосов
/ 29 июля 2011

Предполагая, что у вас есть <div id="elem"></div> на вашей странице, вы можете определить, находится ли она вне области просмотра, например:

var $elem = $('#elem'),
    top = $elem.offset().top,
    left = $elem.offset().left,
    width = $elem.width(),
    height = $elem.height();

if (left + width > $(window).width()) {
    alert('Off page to the right');
}

if (top + height > $(window).height()) {
    alert('Off page to the bottom');
}
0 голосов
/ 31 декабря 2015

Все ответы здесь не проверяли, имеет ли элемент top: negative value или left: negative value.

Так вот почему я даю более правильный или точный ответ здесь.

var pageWidth = $(".page").width();
var pageHeight = $(".page").height();
var pageTop = $(".page").offset().top;
var pageLeft = $(".page").offset().left;

var elementWidth = $(".element").width();
var elementHeight = $(".element").height();
var elementTop = $(".element").offset().top;
var elementLeft = $(".element").offset().left;


if ((elementLeft >= pageLeft) && (elementTop >= pageTop) && (elementLeft + elementWidth <= pageLeft + pageWidth) && (elementTop + elementHeight <= pageTop + pageHeight)) {
  // Its inside
  alert('Inside');
} else {
  //
  alert('Outside');
}
.page {
  overflow: hidden;
  width: 200px;
  height: 200px;
  position: relative;
  background: black;
}
.element {
  width: 100px;
  height: 100px;
  position: absolute;
  background: blue;
  top: -10px;
  left: -10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<div class="page">
  <div class="element">
  </div>
</div>

Check Fiddle

0 голосов
/ 29 июля 2011

Вы пытались использовать CSS, чтобы предотвратить это?

pre { word-wrap:break-word; }

Перебирать каждый элемент на странице кажется чрезмерным, и это займет некоторое время на занятой странице. Это возможно, но не совсем практично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...