Что такое эквивалент getBoundingClientRect на iPhone Mobile Safari 3?
iPhone Mobile Safari, похоже, отсутствует элемент.getBoundingClientRect. Что такое эквивалентный метод на iPhone Mobile Safari? Этот метод существует на iPad.
2 ответов
Edit 1: Этот код (webkitConvertPointFromNodeToPage) требуется только для очень старых и устаревших телефонов... см.эти комментарии.
EDIT 2: я бы не рекомендовал вам использовать этот код... Я помню, что изменил его, чтобы справиться с некоторой проблемой с IE10 с сенсорным зумом. Я постараюсь не забыть обновить код с помощью исправления.
было: я думаю, что следующие работы на IE6+, FF3+, Safari 2+ (Desktop & Mobile), Chrome (Desktop & Android), Опера:
function offset(el) {
var convertPoint = window.webkitConvertPointFromNodeToPage;
if ('getBoundingClientRect' in el) {
var
boundingRect = el.getBoundingClientRect(),
body = document.body || document.getElementsByTagName("body")[0],
clientTop = document.documentElement.clientTop || body.clientTop || 0,
clientLeft = document.documentElement.clientLeft || body.clientLeft || 0,
scrollTop = (window.pageYOffset || document.documentElement.scrollTop || body.scrollTop),
scrollLeft = (window.pageXOffset || document.documentElement.scrollLeft || body.scrollLeft);
return {
top: boundingRect.top + scrollTop - clientTop,
left: boundingRect.left + scrollLeft - clientLeft
}
} else if (convertPoint) {
var
zeroPoint = new WebKitPoint(0, 0),
point = convertPoint(el, zeroPoint),
scale = convertPoint(document.getElementById('scalingEl'), zeroPoint);
return {
top: Math.round(point.y * -200/scale.y),
left: Math.round(point.x * -200/scale.x)
}
}
}
где следующее-дитя тела:
<div id="scalingEl" style="position:absolute;top:-200px;left:-200px;visibility:hidden;"></div>
метод требует некоторой проверки ошибок (например, элемент должен быть в документе). Масштаб позволяет работать при увеличении страницы, но может не потребоваться (мне это было нужно при тестировании webkitConvertPointFromNodeToPage в Windows Safari).
для тех, кто ищет ele.getBoundingClientRect().метод ширины на iOS 3 Вы можете использовать ele.offsetWidth
if("getBoundingClientRect" in this.container) {
this.width = this.container.getBoundingClientRect().width ;
}else {
this.width = this.container.offsetWidth; //http://help.dottoro.com/ljvmcrrn.php
}