Problem z przekazaniem zmiennej.

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 ;)

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.

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:

start = 500;

powinno pomóc.

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

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?

0

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


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);

});
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:

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

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

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

<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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1