Problem z przekazaniem zmiennej.

Problem z przekazaniem zmiennej.
S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 70
0

Hej, jestem początkujący w kwestii JS, a właściwie to jQuery, bo na tym się opieram.
Niestety Google nie pomogło, pewnie błędnie wpisuje zapytanie, dlatego przyszedłem tutaj.
Mam problem z przekazaniem zmiennej do funkcji wywoływanej z innej funkcji, któa to wywoływana jest z jeszcze innej funkcji ;)

Kopiuj
jQuery(document).ready(function($) {

let start = 500;

$(window).resize(function(){
start = 600;
})

$(window).scroll(scrollEnded);

var scrollEnded = $.debounce(5, false, function() {
    $('.js-sticky-on-scroll').owlStickyElement();
});

jQuery.fn.owlStickyElement = function(mobile = false) {
    return this.each(function() {
        var $element = $(this);
        var x = start // Tutaj potrzebuję zmienną START
    });
};

});

Pociąłem kod, aby pokazać Wam tylko to co istotne.
Jak w takim wypadku najlepiej przekazać zmienną start? Zmienna ta ma pobrać początkową pozycję elementu i nie może się zmieniać dopóki nie dojdzie do resize() okna, dlatego musi być na starcie zadeklarowana.

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
2

Nie bardzo czaję, co to w ogólności ma robić, ale chyba próbujesz użyć zmiennej globalnej, a tymczasem deklarujesz zmienną blokową let;
Podejrzewam, że:

Kopiuj
start = 500;

powinno pomóc.

https://www.w3schools.com/js/js_let.asp

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

Mam problem

jaki konkretnie problem?

z przekazaniem zmiennej do funkcji wywoływanej z innej funkcji

Jak to do funkcji wywoływanej z innej funkcji?

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 70
0

Fakt, zbyt to uprościłem. I niepotrzebnie wrzuciłem wszystkie funkcje do jednego zakresu, bo w rzeczywistości mam tak:

Kopiuj

var scrollEnded = $.debounce(5, false, function() {
    $('.js-sticky-on-scroll').owlStickyElement();
});

jQuery.fn.owlStickyElement = function(mobile = false) {
    return this.each(function() {
        var $element = $(this);
        var x = start // Tutaj potrzebuję zmienną START
    });
};

jQuery(document).ready(function($) {

let start = 500;

$(window).resize(function(){
start = 600;
})

$(window).scroll(scrollEnded);

});
L7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 434
1

Twoja zmienna start zadeklarowana w jQuery w ready ma zasięg lokalny a nie globalny. Jak to na stackoverflow piszą

Don't fall in creating a "god object" containing all you need

:)

Zobacz sobie taki kod:

Kopiuj
<script>
	let start = 500;
	jQuery(document).ready(function($) {
		let start = 600;
		console.log(start);
	});

	function showStart() {
		console.log(start);
	}
	showStart();
</script>
L7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 434
2

Odpisuj przez odpowiedz bo brzydko to wygląda jak sam sobie odpisuje :)
Ja bym ominął to w ten sposób:

Kopiuj
<script>
	let start = 500;

	function resize() {
		$(window).resize(function() {
			start = 600;
			console.log(start);
			showStart();
		})
	}

	jQuery(document).ready(function($) {
		console.log(start);
		resize();
	});

	function showStart() {
		console.log(start);
	}
	showStart();
</script>

Oczywiście na podstawie mojego przykładu :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.