• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna zmiana marginesu diva. Funkcja nie działa zaraz po załadowaniu strony.

Object Storage Arubacloud
0 głosów
190 wizyt
pytanie zadane 30 grudnia 2017 w JavaScript przez Pasioo Nowicjusz (240 p.)

Witam.

Na początek kod

Z nudów zacząłem robić pseudo szablon strony, trochę responsywnej. Chciałbym żeby div o klasie "menu-bar" był cały czas przyklejony do górnej krawędzi strony. Używając pozycjonowania "sticky" działa tak jak powinno, jednak chciałbym wykorzystać pozycjonowanie "fixed", dlatego podłączyłem skrypt js, który ma pobrać wysokość klasy "menu-bar" i zmieniać margines klasy "main-container" o wartość wysokości menu (tak żeby menu nie zasłaniało głównego kontenera). Skrypt powinien się ładować kiedy strona jest gotowa, ale nie działa. 


Cannot read property '0' of undefined     -to wyskakuje w konsoli po odświerzeniu


Chciałbym też żeby margines zmieniał się dynamicznie.

Moje pytania brzmią, czy to co próbuję zrobić w ogóle ma sens? Może jest na to znacznie prostszy sposób?

komentarz 31 grudnia 2017 przez Pasioo Nowicjusz (240 p.)

Czyli mam rozumieć, że są jakby 2 rozwiązania, tak?


document.addEventListener("DOMContentLoaded", function (){
	
	var container=document.getElementsByClassName("main-container");
	
	var menubar=document.getElementsByClassName("menu-bar");
	
	var menubar_height=menubar[0].offsetHeight;
		
container[0].style.marginTop = menubar_height+17+"px";

});
                // --------------------

document.addEventListener("DOMContentLoaded", function (){
 
	var container=document.getElementsByClassName("main-container")[0];
 
	var menubar=document.getElementsByClassName("menu-bar")[0];
  
	var menubar_height=menubar.offsetHeight;
 
	container.style.marginTop = menubar_height+17+"px";
});

 

I tak i tak działa. Jeszcze potrzebuję pomocy w tym, żeby to skalowało się dynamicznie.

komentarz 31 grudnia 2017 przez Pasioo Nowicjusz (240 p.)

Jak do tej pory zrobiłem coś takiego. Niby w konsoli nie ma błędów, ale kiedy się odświeża stronę raz za razem, margines co kilka kliknięć zmienia się na mniejszy o kilka px, za następne kilka klików zmienia się znów. Nie mam pojęcia dlaczego.

function resizing(){
	
	var container=document.getElementsByClassName("main-container");
	
	var menubar=document.getElementsByClassName("menu-bar");
	
	var menubar_height=menubar[0].offsetHeight;
		
container[0].style.marginTop = menubar_height+17+"px";
  
 }
 document.addEventListener("DOMContentLoaded", function (){resizing()});
 window.onresize = function (){resizing()};

 

2 odpowiedzi

0 głosów
odpowiedź 31 grudnia 2017 przez pablop76 VIP (123,180 p.)
edycja 31 grudnia 2017 przez pablop76

1.To działa ale błąd jest w tym, że

document.container[0]

to nie jest właściwość więc obiekt document nie jest potrzebny.

2.

var menubar_height=menubar.offsetHeight;

menubar to HTMLCollection więc musisz wyodrębnić pierwszy element

menubar[0].offsetHeight;

3. Pozostaje podstawić menubar_height + "px" tam gdzie dałeś 532px;

0 głosów
odpowiedź 31 grudnia 2017 przez Bazinga Bywalec (2,120 p.)

No to miałeś 3 błędy:

1. Przy ClassName , należy dodać, do którego elementu będziesz się odwoływał.
2. Przy container niepotrzebnie dodałeś document , oraz liczbę na końcu
3. Do testów lepsza byłaby informacja czy, pobrana jest wartość elementu
 

document.addEventListener("DOMContentLoaded", function (){

var container=document.getElementsByClassName("main-container")[0];

var menubar=document.getElementsByClassName("menu-bar")[0];

alert(menubar.offsetHeight);
console.log(menubar.offsetHeight);

var menubar_height=menubar.offsetHeight;

container.style.marginTop = "532px"; //te 532px to tak na próbę,
});

 

Podobne pytania

0 głosów
0 odpowiedzi 323 wizyt
pytanie zadane 5 marca 2022 w JavaScript przez Us Użytkownik (880 p.)
0 głosów
1 odpowiedź 337 wizyt
0 głosów
1 odpowiedź 84 wizyt
pytanie zadane 8 października 2018 w JavaScript przez Bakr Mądrala (6,850 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...