11
votes

Fonction javascript pure similaire à jquery.offset ()?


4 commentaires

S'il vous plaît ne postez pas d'URLS que 1.) nécessitent une inscription 2.) sont en russe ... :)) C'est plutôt inutile.


Qu'en est-il des questions Facebook? Il y en a beaucoup ici et ils ont besoin d'inscription.


Mais tout le monde est sur FB, il ne faut donc pas vraiment vous inscrire si vous voulez vous aider. Et ce n'est certainement pas en russe (seulement). :)


Peu importe, s'il s'agit d'un réseau social russe, hongrois ou américain. J'essayais de résoudre un problème JavaScript / Iframe et j'ai fourni suffisamment d'informations au début et plus tard. Si vous consultez mes autres questions ici chez Stackoverflow, vous verrez que je le faisiez toujours (fournissez suffisamment d'informations et de tests de test et de répondre à chaque commentaire lorsque vous demandez quoi que ce soit).


4 Réponses :



0
votes

Utilisez offSetheight ou client pour obtenir la hauteur de div (pré> xxx

Utilisez offsetleft et et offsettop Pour obtenir la position de Div par rapport à son offset-parent . offsetParent est sa première boîte de parents que le style de position est fixe, relatif ou absolu.


7 commentaires

Merci, mais getElementyid () travaille-t-il avec tous les navigateurs principaux?


OUI. Presque tous les navigateurs pris en charge GetElementByID . Voir ce lien


Malheureusement, les deux offsethteight et la clientèle sont imprimés comme 0 pour une raison quelconque - voir ma question mise à jour


Pouvez-vous coller complètement le contenu de # FB-root? Ou donnez-moi le lien de votre page de test que je peux accéder.


L'adresse est Odnoklassniki.ru/game/preferans (je suis désolé - c'est à la Russe Facebook-Clone). Lorsque j'interroute ("xxx" + document.getelementByID ("FB-racine"). Clientheight); Il imprime "xxx 0". L'ID

est vide. Ci-dessus, c'est mon jeu flash. J'ai utilisé une DIV vide, car c'est comme ça que c'est habituellement fait pour le vrai Facebook: Stackoverflow.com/questions/5928724/...


Êtes-vous sûr que # FB-root a déjà du contenu lorsque vous obtenez sa hauteur? Si vous utilisez Safari ou Chrome (ou utilisez Firebug dans Firefox), vous pouvez exécuter Document.getElementByID ("FB-ROOT"). OffSetheight Dans la console de l'outil de développeur pour vérifier si cela fonctionne. Bonne chance.


FB-ROOT N'A PAS DE CONTENU, mais lorsque je mets xxx dans celui-ci:

xxx - alors rien ne change. La console Firebug imprime: [06: 44: 17.768] TypeError: document.getelementByID ("FB-racine") est null



1
votes

si document.getelementByID ("FB-racine"). Clientighight code> retourne 0, cela signifie certainement que votre "FB-racine" div est non affichée ou non vide.

J'ai C'était un coup d'oeil à Fapi.js, et il semble que l'appelant la fonction Fapi.init crée une étendue que ID est "Fapi_flash_wrap", ajoute-le sur le corps du document, puis incorpore un objet Flash avec ID "FAPI_FLASH" dans cette portée. . P>

Je vais donc essayer de récupérer un élément avec ID "FAPI_FLASH_WRAP" ou "FAPI_FLASH" au lieu de "FB-ROOT": P>

<script type="text/javascript">
FAPI.init("http://api.odnoklassniki.ru/", "XXX_YYY",
function() {
    var height = document.getElementById("FAPI_Flash_wrap").offsetHeight;
    var width = document.getElementById("FAPI_Flash_wrap").offsetWidth;
    FAPI.UI.setWindowSize(width, height);
}, function(error){alert("API initialization failed");}
);
</script>


2 commentaires

Je suis désolé, mais les alertes n'apparaissent pas du tout et la page n'est pas redimensionnée. Dans la console Firebug, je vois de nombreux avertissements mais aucune erreur correspondante. Lorsque j'ai remis mon code d'origine avec une hauteur codée à code grave - alors il fonctionne soudainement ok.


Hmm, étrange. Si vous essayez "alerte (document.getElementyID (single));" Dans la ligne de commande Firebug, il apparaîtra nécessairement «[Objet Quelqu'un) ou« Null »ou« NULL », vous pouvez donc vérifier si un élément d'identité« anormal »existe à ce moment. Si ni "fapi_flash_wrap" ni "fapi_flash" n'existe, peut-être le HTML complet de la page après avoir chargé avec succès le jeu serait utile.



11
votes

En regardant le code dans jQuery , le Le décalage est calculé comme celui-ci:

function getOffset(element)
{
    if (!element.getClientRects().length)
    {
      return { top: 0, left: 0 };
    }

    let rect = element.getBoundingClientRect();
    let win = element.ownerDocument.defaultView;
    return (
    {
      top: rect.top + win.pageYOffset,
      left: rect.left + win.pageXOffset
    });   
}


1 commentaires

Merci beaucoup. Ça fait sauver mon temps de temps