11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour, débutant avec jquery, je parviens à faire les deux choses dont j'ai besoin. Le problème est que lorsque je les assemble, évidemment cela ne fonctionne pas.

Je m'explique. Bon, avant de m'étendre, il s'agit du fait qu'une page html chargée dans un div, n'existe pas vraiment dans la page. Si l'on pointe à partir d'un lien, une zône de ce div, il ne se passe rien. Normal la page n'est là que virtuellement.

Voici un lien où je scrolle - ça fonctionne impec
http://thelia-spip.magnitude-6.net/montage/news4.html

Voici un lien ou (en cliquant sur convictions), la page précédente se charge dans le div de droite. Ca fonctionne (pas impec d'ailleurs - quelques réglages a effectuer)
http://thelia-spip.magnitude-6.net/montage/news5.html

Par contre à ce niveau là, le scroll ne fonctionne plus - et c'est normal, en regardant le code source, on remarque que le nouveau code n'est pas chargé en vrai dans le source - Apparamment, d'après tout ce que j'ai lu (je suis là-dessus depuis une semaine), c'est normal (ajax, reinjecter dans le DOM, etc). J'ai essayé avec livequery et aussi le rebind mais rien n'y fait. J'ai vu plein de super demo et de sites, mais meme eux leurs codes sources ne changent pas.

Si quelqu'un veut bien me montrer comment faire, je lui en serais reconnaissant.
Merci d'avance
Bonjour,

Rien compris à ton problème. Quel scroll ne fonctionne plus? Le défilement normal du navigateur? Auquel cas c'est normal, et ça n'a rien à voir avec JavaScript: tu figes la hauteur de ton conteneur à 760px, en overflow:hidden.

Sur la page http://thelia-spip.magnitude-6.net/montage/news5.html , le contenu est limité et ne remplit pas cette hauteur. Sur la première que tu indiques, le contenu est plus haut est tout ce qui dépasse est masqué.
Bonjour, tout d'abord merci pour ton attention.

Effectivement mon post était incomplet, pardonne moi, j'ai fait çà cette nuit et je n'avais surement pas toutes les idées claires.

Donc en résumé, (sur http://thelia-spip.magnitude-6.net/montage/news4.html), il ne s'agit pas du scroll des ascenceurs mais seulement du scroll qui se fait à l'aide des toutes petites flèches (oui je sais c'est petit, mais cela n'est pas moi qui a fait la créa - c'est petit, mignon joli Smiley smile ).

Les petites fleches dans la colonne blanche centrale.Tu commences à cliquer sur la flèche du haut, puis les news remontent avec un joli scroll (jquery -> animate({scrollTop............) - Tu peux ensuite redescendre avec la flèche du bas - Il y a 10 news pour le test (avec contrôles min et max).

Je suis hyper satisfait de ce scroll. Concernant le overflow:hidden, tu comprendras que c'est fait exprès, pour le joli effet des news qui viennent du bas...

Donc, jusqu'ici, je n'ai strictement aucun problème.
Passons à présent à la suite : lorsque cette partie droite n'est pas dans la page elle même, mais est chargée après un click sur le lien "convictions" (sur l'exemple http://thelia-spip.magnitude-6.net/montage/news5.html).

Dans ce cas, ma page arrive bien (plugin livequery ou pas) dans le div (de droite) en animation (pas terrible à cause de la taille verticale grande), mais l'action des petites flèches n'a pas d'effet sur le scroll.

Après enquête, j'ai compris que la page était chargée virtuellement. En fait si tu regardes dans le code source à ce moment là, c'est toujours l'ancien texte qui est présent.

Sur les deux exemples suivant, magnifique et super pro !!! en regardant le code source, c'est la même. Il ne se réactualise pas.
http://nettuts.s3.amazonaws.com/011_jQuerySite/sample/index.html
http://ecrantotal72.com/

Voilà, j'espère avoir été assez précis, et encore désolé si c'est un peu long, mais c'est pas évident d'expliquer tout çà.

En fait, je le disais au début de mon précédent post, il s'agit du problème de page chargée dynamiquement dans un div, mais qui n'apparait jamais dans le code source. Moralité, on ne peut pas la manipuler (le scroll en l'occurence) à partir d'un autre div. Il semblerait que tout çà est normal (ajax) et que le "rebind" ou le plugin livequery résolve ce problème. Je n'y suis pas parvenu.

Grand merci d'avance
buster a écrit :
Donc en résumé, (sur http://thelia-spip.magnitude-6.net/montage/news4.html), il ne s'agit pas du scroll des ascenceurs mais seulement du scroll qui se fait à l'aide des toutes petites flèches (oui je sais c'est petit, mais cela n'est pas moi qui a fait la créa - c'est petit, mignon joli Smiley smile ).

Un scroll vertical avec des petits boutons comme dans les mauvais sites en Flash? (...)

buster a écrit :
Tu commences à cliquer sur la flèche du haut, puis les news remontent avec un joli scroll (jquery -> animate({scrollTop............)

Sauf que là la flèche du haut fait remonter les contenus... comme le ferait la flèche du bas du clavier ou la molette de la souris vers le bas dans une page normale. Bref, c'est à l'envers. (...)

buster a écrit :
Je suis hyper satisfait de ce scroll.

Bon alors on va atténuer cette satisfaction rapidement, ça pourrait rendre service aux utilisateurs à l'avenir:
- en termes d'ergonomie c'est une catastrophe, le scroll étant à l'envers;
- ergonomie toujours: les boutons de scroll ont une surface très limitée, ce qui les rend difficilement cliquables;
- ergonomie et accessibilité: le focus au clavier sur les boutons de scroll est discret, ce qui fait qu'on peut facilement passer à côté...;
- ergonomie: la molette de la souris ne fonctionne pas (contrairement à une page normale, et donc au fonctionnement que l'utilisateur attend);
- ergonomie et accessibilité: les touches de direction du clavier ne fonctionnent pas (contrairement à une page normale, et donc au fonctionnement que l'utilisateur attend);
- compatibilité et accessibilité: si JavaScript est désactivé, l'essentiel des contenus est masqué.

Non, franchement, il y a peut-être de l'idée et du travail derrière mais objectivement c'est mauvais comme résultat.

buster a écrit :
Donc, jusqu'ici, je n'ai strictement aucun problème.

Comme je le montre plus haut, tu as toute une série de problèmes d'ergonomie et d'accessibilité, qui rendent les pages ainsi construites bien moins attrayantes et agréables à utiliser (ou tout bêtement possibles à utiliser) que des pages classiques où on utilise la barre de défilement globale.

buster a écrit :
Passons à présent à la suite : lorsque cette partie droite n'est pas dans la page elle même, mais est chargée après un click sur le lien "convictions" (sur l'exemple http://thelia-spip.magnitude-6.net/montage/news5.html).

Dans ce cas, ma page arrive bien (plugin livequery ou pas) dans le div (de droite) en animation (pas terrible à cause de la taille verticale grande), mais l'action des petites flèches n'a pas d'effet sur le scroll.

Le script du scroll calcule sans doute la hauteur du contenu. Il faudrait réinitialiser ou réinstancier ce script après le chargement de contenus supplémentaires.

buster a écrit :
Après enquête, j'ai compris que la page était chargée virtuellement.

Ça n'est pas vraiment ça. Les contenus chargés en Ajax et insérés dans le DOM sont... insérés dans le DOM. Reprenons:
- au chargement de la page, le serveur envoie une page HTML;
- à partir de cette page, le navigateur construit l'arbre DOM du document;
- les scripts qui s'exécutent ensuite (car en général les scripts sont exécutés après la construction de l'arbre DOM du document, ou plus tard encore suite à des actions de l'utilisateur) peuvent modifier le DOM;
- si tu regardes le code source (avec «Affichage > Code source de la page» dans Firefox, par exemple), tu vois le code HTML envoyé initialement par le serveur;
- tu peux aussi consulter le code source généré, qui correspond à l'état actuel du DOM, via Firebug ou la Web Developer Toolbar, ou encore en sélectionnant un contenu et en utilisant («Menu contextuel > Code source de la sélection»).

Tout ça est parfaitement normal. Mais comme tu charges des contenus après le chargement initial et la première exécution de tes principaux scripts, il y a un certain nombre d'actions à répéter (pour peu que les scripts soient prévus pour ça!) pour prendre en compte les nouveaux contenus.

buster a écrit :
Sur les deux exemples suivant, magnifique et super pro !!! en regardant le code source, c'est la même. Il ne se réactualise pas.
http://nettuts.s3.amazonaws.com/011_jQuerySite/sample/index.html
http://ecrantotal72.com/

Sur le premier exemple, avec Firebug, tu peux constater que le DOM est bien modifié à chaque clic sur le menu.
Pour le deuxième exemple, je n'ai pas pu le consulter.

buster a écrit :
il s'agit du problème de page chargée dynamiquement dans un div

Non, car tu ne charges pas une «page», c'est une vision erronée. Tu insères un certain nombre de noeuds DOM.

Une révision ou un apprentissage des bases de JavaScript, du DOM et de Ajax serait nécessaire. Smiley cligne

buster a écrit :
Il semblerait que tout çà est normal (ajax)

Oui.

buster a écrit :
et que le "rebind" ou le plugin livequery résolve ce problème.

Pour le rebind, il me semble que ça ne concerne que les gestionnaires d'évènements. Donc ce ne serait pas suffisant ici.
Modifié par Florent V. (29 Nov 2008 - 00:09)
Modifications du message ci-dessus: suppression de quelques «traits d'humour» pas très heureux.
Désolé, je n'étais pas revenu sur ce post, car j'ai résolu mes pbs avec spip.
Il suffisait que je crée mes boites avant, (le nombre de boites se crée en fonction du nombre d'articles), puis spip se charge de les remplir.

En tout cas merci pour toutes tes remarques qui sont, il est vrai, judicieuses, mais c'est pas moi qui fait la créa et je suis loin d'être une bête en javascript/ajax/dom.

Y'a une version de présentation qui marche bien là : http://paypal-spip.magnitude-6.net/

De toutes façon, maintenant on met plus ces petites fleches de merde (tu vas etre content), mais je dois faire un drag & drop sur un faux ascenceur (la créa !!!), qui, lui, fera monter ou descendre la page.

Je suis dessus, et je transpire encore plus, parce que là, le drag&drop doit jouer sur les deux éléments. L'ascenceur et le contenu qui dit bouger dans le sens inverse - os court - bon j'y retourne et si t'as uneidée la-dessus, n'hésites pas.

A+

Buster