Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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
}