Récupérer un valeur dans une fonction

Résolu/Fermé
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - Modifié le 7 mai 2019 à 12:54
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 9 mai 2019 à 15:16
Bonjour,


J'ai une code qui permet de récupérer de calculer la fenêtre d'un pdf avec la valeur scale par rapport au width de la fenêtre le voici:

var unscaledViewport = page.getViewport(1);
//scale permet de redimensionner un pdf sur un élément html
var scale = Math.min(($(window).width() / unscaledViewport.width));
var viewport = page.getViewport(scale);
console.log(viewport);

Ca marche bien mais le problème c'est que ce code ne prend pas la taille en temps réel du width que seulement si j'actualise la page. Alors ce que je veux c'est d'obtenir la valeur du width lorsque je redimensionne la fenêtre sans avoir à rafraichir la page.

J'aimerais donc insérer ce code dans un function resize:

$(window).resize(function() { 
   
}); 


Ce que je veux c'est quelque chose du genre:

$(window).resize(function() { 
  var unscaledViewport = page.getViewport(1);
  var scale = Math.min(($(window).width() / unscaledViewport.width)); 
}); 

//La variable viewport doit récupère la variable scale qui se trouve dans la function resize

var viewport = page.getViewport(scale);
console.log(viewport);



Mais je ne sais pas comment faire, pouvez vous m'aider s'il vous plaît. Merci de votre collaboration.

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 mai 2019 à 14:23
Bonjour,

Essaie comme ça :
var viewport;

function updateViewport() {
  var unscaledViewport = page.getViewport(1);
  var scale = Math.min(($(window).width() / unscaledViewport.width)); 
  viewport = page.getViewport(scale);
}

$(window).resize(updateViewport); 

updateViewport();

console.log(viewport);
0
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
7 mai 2019 à 15:04
Merci de m'avoir répondu, votre function marche très bien mais le problème c'est au niveau du:
$(window).resize(updateViewport); 

En fait, quand je redimensionne la page alors la valeur retourné par la fonction updateViewport reste le même. l'évènement resize n'est pas détecter.

Cordialement,
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 mai 2019 à 15:07
As-tu des erreurs dans la console de ton navigateur ?
0
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
Modifié le 7 mai 2019 à 15:15
Non! je ne détecte aucun erreur sur la console mais elle me retourne un seul valeur est c'est tout, la valeur ne se met pas à jour lorsque je redimensionne la fenêtre, elle ne détecte pas l'évènement resize même si je change la valeur du fonction par le message hello word, alors elle me retourne seulement un seul hello word même si je redimensionne la fenêtre.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 mai 2019 à 15:24
Ah mais ça c'est normal, le console.log n'est pas inclus à la fonction. Tu peux le rajouter à la dernière ligne de la fonction.
0
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
8 mai 2019 à 07:43
Bonjour,
Merci, ca fonctionne:

var viewport;
         function updateViewport() {
		var unscaledViewport = page.getViewport(1);
			var scale = Math.min(($(window).width() / unscaledViewport.width)); 
				viewport = page.getViewport(scale);
				console.log(viewport)
				console.log("Scale: " + scale);
				}
							$(window).resize(updateViewport); 


Mais comment récupère-ton la valeur du variable en dehors du fonction à partir de $(window).resize(updateViewport); ?
Car lorsque je met par exemple la variable scale en dehors du fonction:
var viewport;
         function updateViewport() {
		var unscaledViewport = page.getViewport(1);
			var scale = Math.min(($(window).width() / unscaledViewport.width)); 
				viewport = page.getViewport(scale);
				
				}
							$(window).resize(updateViewport); 
console.log(viewport)
console.log("Scale: " + scale);


Alors ça me retourne un erreur: ReferenceError: scale is not defined
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 mai 2019 à 18:01
Bonjour,

Comme pour viewport ... en déclarant la variable en dehors de la fonction.
var viewport;
var scale ;
function updateViewport() {
   var unscaledViewport = page.getViewport(1);
   scale = Math.min(($(window).width() / unscaledViewport.width)); 
   viewport = page.getViewport(scale);
}
$(window).resize(updateViewport); 
 console.log("viewport", viewport);
 console.log("Scale: " , scale);
0
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
Modifié le 9 mai 2019 à 08:02
Encore merci de m'avoir répondu! si j’essaie d’exécuter les deux variables viewport et scale en dehors du function cela me retourne toujours un résultat undefined, voici quelque capture du console:


Cordialement,
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 mai 2019 à 09:47
Bonjour,

Peux-tu nous redonner ton code, tel qu'il est maintenant ?

Xavier
0
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
Modifié le 9 mai 2019 à 11:05
Bonjour,
Je suis encore sur l'ancien code que vous m'avez suggérer:

var scale ;
var viewport;
function updateViewport() {
   var unscaledViewport = page.getViewport(1);
   scale = Math.min(($(window).width() / unscaledViewport.width)); 
   viewport = page.getViewport(scale);
}
$(window).resize(updateViewport); 
 console.log("viewport", viewport);
 console.log("Scale: " , scale);


Cela m'a retourné scale: undefined, et viewport undefined. Les variables récupère bien le dimension de la fenêtre en temps réel si on le met dans la function mais quand on l’exécute en dehors du function alors elle est initialisé en undefined.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 mai 2019 à 11:19
Bonjour,

C'est normal.
Il faut bien comprendre ce qu'il se passe ici.
Tu as un script (ces 10 lignes) qui est appelé lorsque la page est chargée. Dans l'état, le script fait :
- déclaration des variables ;
- déclaration d'une fonction, updateViewport, qui, quand elle est appelée, affecte des valeurs à tes deux variables ;
- affectation de cette fonction à l'événement Resize ;
- affichage du contenu des variables.

Déclarer la fonction ne l'exécute pas. Donc au chargement de ta page, la fonction n'est pas du tout appelée. Elle n'est appelée que quand la fenêtre est redimensionnée. Les variables ne sont donc initialisées qu'à ce moment.
Par ailleurs, l'affichage de la valeur des variables n'est fait qu'une fois : au chargement de la page. Donc avant que la fonction n'ait été appelée une première fois... Il est normal qu'elles soient encore undefined.

Pour y remédier, tu peux déplacer les deux console.log à l'intérieur du corps de la fonction.
Par ailleurs, je pense que tu as besoin d'initialiser tes variables au chargement de la page, car tu en auras besoin même si l'utilisateur ne redimensionne pas sa page.
Donc, rajoute un simple appel à la fonction (comme montré dans le code que j'avais donné) : updateViewport(); à la fin de ton script.

Xavier
0