2010-05-07 7 views

Respuesta

7

Editar 1: Este código (webkitConvertPointFromNodeToPage) solo se requiere para teléfonos muy viejos y desactualizados ... ver these comments.

EDIT 2: No recomendaría que use este código ... Recuerdo haberlo cambiado para solucionar algunos problemas con IE10 con el zoom táctil. Trataré de recordar actualizar el código con la solución.

fue: Creo que los siguientes trabajos sobre IE6 +, FF3 +, Safari 2+ (Escritorio & móvil), Cromo (Escritorio & 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) 
     } 
    } 
} 

donde el siguiente es un niño del cuerpo :

<div id="scalingEl" style="position:absolute;top:-200px;left:-200px;visibility:hidden;"></div> 

El método necesita una comprobación de errores (por ejemplo, el elemento debe estar en el documento). La escala hace que funcione cuando se amplía la página, pero puede no ser necesario (lo necesité al probar webkitConvertPointFromNodeToPage en Windows Safari).

1

Para aquellos que buscan la ele.getBoundingClientRect(). Método ancho en iOS 3, puede utilizar 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 
} 
+0

un cheque puede ser más simple 'si (div.getBoundingClientRect) {} else {} ' –

Cuestiones relacionadas