J'utilise jQuery pour effectuer les opérations suivantes en une seule fonction:Comment repositionner un élément HTML dynamique sur le côté droit d'une fenêtre de navigateur?
initialement j'ai un DIV positionné de manière abso- lue; J'ai mis le HTML interne de la DIV à un texte/HTML nécessaire; alors je montre l'élément à certaines coordonnées en utilisant css ({top: initialTop, left: initialLeft}). Tout fonctionne bien à l'intérieur de la zone gauche et au centre de la page - je vois le DIV avec coin topleft aux coordonnées demandées. Lorsque je veux afficher l'élément sur le côté droit de la page, je dois garder le DIV 100% visible, donc je dois montrer son angle droit aux coordonnées demandées (au lieu du coin du topleft). Je peux obtenir la largeur de la fenêtre et faire défiler les offsets sans problèmes et je peux calculer le décalage à soustraire du coin supérieur de la DIV pour faire son coin droit - je prends juste la largeur DIVs et soustrais les coordonnées.
Le problème est - cette approche ne fonctionne que la deuxième fois après que je modifie le contenu de la DIV. La première fois que j'appelle myDiv.width(), il conserve la valeur précédente - la largeur de la DIV avec l'ancien texte. La deuxième fois que j'appelle la même fonction pour le même élément, tout fonctionne bien.
J'ai entendu parler de retard de rendu - il semble que ça se passe dans mon cas; le navigateur ne rend pas le DIV avec le texte mis à jour jusqu'à ce que la fonction se termine, donc je ne peux pas obtenir la bonne largeur.
va ici le code simplifié:
// at the beginning I have the following style:
#myDiv
{
position: absolute;
top: 0;
left: 0;
}
function PutDivWithInPlace(text, x) {
var $div = $('#myDiv');
$div.html(text);
$div.show(); // even if it worked, I would really like to keep myDiv invisible to avoid it jumping from the old position to the new one
var width = $div.outerWidth();
// I ignore x-scroll offset here for simplicity
// if the right edge of div flows over the window right side, then push it to the left
if (x + width > $(window).width()) {
x -= width;
}
$div.css({
left: x
});
// this does not work - the width is still from the previous call of PutDivWithInPlace, so myDiv appears at the wrong place :(
}
est-il un autre moyen d'obtenir le coin topright de la DIV où je besoin d'être dans la même fonction où je change le contenu de la DIV (mais seulement si la DIV dépasse la fenêtre de droite)? Peut-être qu'il y a une autre astuce en plus d'utiliser la largeur DIVs pour l'obtenir correctement même après rendu différé?
pouvez-vous poster votre code ici pour que nous l'examinions – Alpesh
En effet, nous avons besoin de voir le code que vous utilisez. – Moses
OK, exemple de code ajouté – JustAMartin