11485 sujets

JavaScript, DOM et API Web HTML5

Salut

Soit un petit slider avec des flèches de défilement:
https://codepen.io/kerlutinoec/pen/PoOzQyZ

La fonction
real.scrollBy({ left: (real.children[0].offsetWidth), behavior: 'smooth' })

fonctionne, mais pas la fonction pour défiler dans l'autre sens :
real.scrollBy({ left: -(real.children[0].offsetWidth), behavior: 'smooth' });

qui saute directement à zéro.

.scrollBy({ right

ne semble pas exister ; d'où l'essai avec une valeur négative, mais ça ne veut pas (même avec des parenthèses en plus ou en multipliant par -1).

Quelqu'un aurait une idée (en conservant le behavior: 'smooth' ) ?

Merci d'avance
Modérateur
Coucou,

On va jouer au jeu du "trouve l'erreur" Smiley lol
if (real.scrollLeft = 0)

Si tu trouves tu gagnes 1 point, si tu me dis "je sais pas" je te donne la réponse et je gagne 1 point Smiley biggol


PS : la valeur négative marche très bien comme indiqué dans les spec, il n'y a pas de soucis ailleurs normalement, ca m'a pris du temps de trouver cette erreur c'était pas du tout là !!! Smiley murf
Modifié par _laurent (02 Mar 2022 - 14:03)
Meilleure solution
Merciii !
Ca marche maintenant !

==

1 point pour moi

Pourquoi la première partie ne marche pas si il y a erreur sur la seconde partie ?
Modérateur
kerlutinoec a écrit :
Pourquoi la première partie ne marche pas si il y a erreur sur la seconde partie ?

J'ai pas compris
_laurent a écrit :

J'ai pas compris


Pourquoi
real.scrollBy({ left: -(real.children[0].offsetWidth), behavior: 'smooth' });
ne marche pas alors que l'erreur est dans
if (real.scrollLeft = 0) { p.style.display = "none" };
?
Modérateur
Ah !

Et bien si ca marchait. Sauf que directement tu mettais real.scrollLeft à 0 (parceque 1 seul égal, au dela de ne pas faire le test du if, ca changeait la valeur de real.scrollLeft) sans transition aucune. Donc avant même qu'il puisse lancer le scrollBy BOUM tu le télescopais avec un = 0 en plein dans sa courge Smiley lol

Bonne journée !
_laurent a écrit :
... parceque 1 seul égal, au-delà de ne pas faire le test du if, ca changeait la valeur de real.scrollLeft

Je reproduis cette erreur régulièrement, et pas plus tard qu'aujourd'hui. On ne devrait pas pouvoir réaffecter une variable dans une instruction conditionnelle à ce qu'il me semble. Ces comportements du langage sont problématiques.
\ô/
Olivier C a écrit :
On ne devrait pas pouvoir réaffecter une variable dans une instruction conditionnelle à ce qu'il me semble. Ces comportements du langage sont problématiques.

une façon de faire est d'inverser les termes de la condition, plutôt que d'écrire maladroitement
if (e.target.tagName = "A") {
}

qui ne lèvera pas d'erreur et qui ne fera rien, écrire
if ("A" = e.target.tagName) {
}

lèvera une erreur du type
Invalid left-hand side in assignment


Mettre la valeur de comparaison à gauche n'est pas toujours simple comme tournure d'esprit.
Modérateur
Dave-Hiock a écrit :
Mettre la valeur de comparaison à gauche n'est pas toujours simple comme tournure d'esprit.

Ah j'avoue que ca me retournerait la tête de faire ça Smiley sweatdrop mais très ingénieux comme trick ! Je note. Merci pour l'idée !