Что эквивалентно getBoundingClientRect на iPhone Mobile Safari 3?

iPhone Safari Safari, похоже, отсутствует element.getBoundingClientRect. Что такое эквивалентный метод на iPhone Mobile Safari? Этот метод существует на iPad.

Ответы

Ответ 1

Изменить 1: Этот код (webkitConvertPointFromNodeToPage) требуется только для очень старых и устаревших телефонов... см. эти комментарии.

EDIT 2: я бы не рекомендовал вам использовать этот код... Я помню, как он менял, чтобы справиться с некоторыми проблемами с IE10 с сенсорным увеличением. Я попытаюсь вспомнить, как обновить код с помощью исправления.

Было: Я думаю, что следующие работы над IE6 +, FF3 +, Safari 2+ (Desktop и Mobile), Chrome (Desktop и Android), Opera:

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).

Ответ 2

Для тех, кто ищет метод ele.getBoundingClientRect(). width на 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
}