jQuery метод .offset()
jQuery DOM методыОпределение и применение
jQuery метод .offset() задает или возвращает значение координат для выбранных элементов (относительно документа).
При получении значений координат этот метод возвращает объект с двумя свойствами:
- позиция элемента от верхнего края документа в пикселях (top).
- позиция элемента от левого края документа в пикселях (left).
Если родительский элемент имеет статическое позиционирование (по умолчанию), то вложенный элемент вернет координаты относительно окна документа (первый случай на изображении), а не относительно родительского элемента. В отличии от метода .position() если родительский элемент имеет позиционирование отличное от статического (фиксированное, абсолютное, или относительное), то вложенный элемент также вернет координаты относительно окна документа (второй случай на изображении):
Если Вам необходимо получить координаты элемента относительно окна документа независимо от того как позиционирован родительский элемент, то Вы можете воспользоваться jQuery методом .offset().
Более подробную информацию о позиционировании элементов вы можете получить в учебнике CSS в статье "Позиционирование элементов в CSS".
jQuery не поддерживает получение координат расположения скрытых элементов. Обратите внимание на отличие методов .position() и .offset(), если у элемента установлены внешние отступы (margin):
Когда вы используете метод .offset() для установки значений, положение элемента определяется относительно документа, при этом если элемент к которому применяется позиционирование имеет статическое позиционирование (static - по умолчанию), то jQuery устанавливает элементу встроенный стиль, определяющий, что элемент имеет относительное позиционирование (style = "position: relative").
jQuery синтаксис:
Синтаксис 1.2 Возвращение значений: $( selector ).offset() // метод используется без параметров Установка значений: $( selector ).offset({top: value, left: value}) // объект с двуми ключами top и left Синтаксис 1.4 Установка значений: $( selector ).offset( function( index, currentOffset ) ) function - Function index - Integer currentOffset - Object
Параметр | Описание |
---|---|
{top: value, left: value} | Объект, который содержит два ключа - top (позиция от верхнего края элемента в пикселях) и left (позиция от левого края элемента в пикселях). |
function(index, currentOffset) | Задает функцию, которая должна возвращать объект с новыми top и left свойствами (ключами).
|
Добавлен в версии jQuery
1.2 (в 1.4 расширен синтаксис)Пример использования
<!DOCTYPE html> <html> <head> <title>Использование jQuery метода .offset() для получения координат</title> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script> $( document ).ready(function(){ $( "button" ).click(function(){ // задаем функцию при нажатиии на элемент <button> var pos = $( "p" ).offset(); var posBody = $( "body" ).offset(); console.log( pos ); // выводим в консоль объект с двуми значениями (позиция элемента <p>) console.log( pos.top ); // выводим в консоль значение ключа top (позиция элемента <p> от верхнего края) console.log( pos.left ); // выводим в консоль значение ключа left (позиция элемента <p> от левого края) console.log( posBody ); // выводим в консоль объект с двуми значениями (позиция элемента <body>) }); }); </script> </head> <body> <button>Клик</button> <p style = "margin-top:200px">My position</p> </body> </html>
В этом примере с использованием jQuery метода .offset() мы получаем и выводим в консоль браузера:
- в первом случае объект с двумя ключами - позиции (относительно документа) от верхнего и левого края элемента <p> в пикселях (обратите внимание, что внешние отступы margin учитываются).
- во втором случае значение от верхнего края элемента <p> в пикселях.
- в третьем значение от левого края элемента <p> в пикселях.
- в четвертом случае объект с двумя ключами - позиции (относительно документа) от верхнего и левого края элемента <body> в пикселях (обратите внимание, что внешние отступы margin учитываются).
Результат нашего примера:
Рассмотрим пример в котором мы используем метод .offset(), чтобы установить значения координат для выбранного элемента:
<!DOCTYPE html> <html> <head> <title>Использование jQuery метода .offset() для установки координат</title> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script> $( document ).ready(function(){ $( "button" ).click(function(){ // задаем функцию при нажатиии на элемент <button> var pos = $( "p" ); console.log( pos.offset() ); // выводим в консоль браузера текущие координаты элемента pos.offset({left:100, top:200}) // устанавливаем значения координат для элемента <p> console.log( pos.offset() ); // выводим в консоль браузера координаты элемента после изменения }); }); </script> </head> <body> <button>Клик</button> <p>My position</p> </body> </html>
В этом примере с использованием jQuery метода .offset() мы:
- выводим в консоль браузера информацию о текущих координатах элемента <p> в пикселях.
- устанавливаем новые значения координат для элемента <p> (смещаем элемент от левого края на 100 пикселей, а от верхнего края на 200 пикселей). Обратите внимание, что элемент автоматически получает встроенный стиль, определяющий, что элемент имеет относительное позиционирование (position: relative) и значения от левого и верхнего края за минусом значений текущей позиции, таким образом, чтобы сумма соответствовала заданному нами числу смещения.
- затем мы выводим в консоль браузера информацию о координатах элемента <p> в пикселях после установки новых значений.
Результат нашего примера:
В следующем примере мы передадим в качестве параметра метода .offset() функцию:
<!DOCTYPE html> <html> <head> <title>Использование функции с методом .offset() для установки координат</title> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script> $( document ).ready(function(){ $( "button" ).click(function(){ // задаем функцию при нажатиии на элемент <button> $("p").offset(function( index, currentOffset ){ var newOffset = {}; // создаем пустой объект newOffset.left = currentOffset.left + 10; // добавляем свойство left (значение left свойства старого объекта + 10) newOffset.top = currentOffset.top + 10; // добавляем свойство top (значение left свойства старого объекта + 10) return newOffset; // возвращаем новый объект со свойствами left и top }); }); }); </script> </head> <body> <button>Клик</button> <p>My position</p> </body> </html>
В этом примере с использованием jQuery метода .offset() и функции, которая возвращает новый объект, содержащий новые значения координат, от верхнего и левого края документа (старое значение координат + 10), мы изменяем позицию элемента <p> при нажатии на кнопку.
Результат нашего примера:
jQuery DOM методы