Reklama
Pokazuje wyniki od 1 do 8 z 8

Temat: [rozwiazane] Zagadka w javascript / jQuery!

  1. #1
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    33
    Posty
    1,909
    Siła reputacji
    19

    Domyślny [rozwiazane] Zagadka w javascript / jQuery!

    Pisze stronke z automatycznie zmieniajacym sie elementem menu w miare jak coraz bardziej sie zjezdza strona w dol.

    Używam skryptu ScrollSpy - https://github.com/sxalexander/jquery-scrollspy

    oraz wlasnego kodu do odpalenia: http://pastebin.com/pqp1kBAg

    Kod :
    
    console.log($('.middle-container').offset().top);
    
    		var sidebarmenu = $('.fixedsidebar-column .menu');
    
    		var counter = $('.fixedsidebar-column');
    		counter.prepend('<span class="c1" style="position:absolute;color:red;font-size:24px;right:-90px;z-index:3000;">0</span>');
    		counter.prepend('<span class="c2" style="position:absolute;color:red;font-size:24px;right:-90px;z-index:3000;top:60px;">0</span>');
    		counter2 = counter.find('.c2');
    		counter = counter.find('.c1');
    
    		var offsetVisible = 200;	
    		var liheight = sidebarmenu.find('li').first();
    		liheight = liheight.height() - (parseInt(liheight.find('a').css('padding-bottom')));
    		var sekcjaindex = 0;
    
    		$('.page-template-page-fixedsidebar-php .pasek').each(function(i) {
    			var name = $(this).attr('class');
    
    			name = name.match(/sekcja\-[a-z,A-z,\-]+/g);
    			if (!name) {
    				return;
    			} else {					
    				name = name[0];
    				name = name.replace('sekcja-','');
    			}
    			var id = '#'+name;
    
    			var position = $(this).offset();
    			console.log($(this));
    			var difference = $(this).offset().top - $(this).position().top;
    			$(this).prepend('<span style="position:absolute;color:red;font-size:30px;z-index:3000;">top: '+($(this).offset().top )+'</span>');
    			$(this).append('<span style="position:absolute;color:red;bottom:0;font-size:30px;z-index:3000;">bottom: '+($(this).offset().top + $(this).height() )+'</span>');
    		//	console.log(id + ' ' + position.top);
    			$(this).scrollspy({
    				min: position.top,
    				max: position.top + $(this).height() ,
    				buffer: 180,
    				onEnter: function(element, position) {
    					counter.text($(window).scrollTop());
    
    					//console.log(id+' min: '+(this.min)+'   scrolltop: '+$(window).scrollTop());
    					sidebarmenu.find('a[href="'+id+'"]').closest('li').addClass('current');
    				},
    				onLeave: function(element, position) {
    					sidebarmenu.find('a[href="'+id+'"]').closest('li').removeClass('current');
    				}
    			});
    			sekcjaindex++;
    		});
    
    	
    	
    		$(window).scroll(function(e){
    			counter2.text($(window).scrollTop());
    		})
    Całość znajduje się tutaj: http://www.test6.stronademo.pl/ofert...y-internetowe/

    Wiem że troche smietnik ale caly czas nad tym pracuje i coraz bardziej sie zasmieca, jak zadziala jak trzeba to posprzatam.

    Ale do sedna o co chodzi z problemem:

    Pozycja w menu zmienia sie jak trzeba, do momentu Grafika na Social media - tutaj zaczyna przeskakiwac za wczesnie. ZA CHOLERE NIE WIEM DLACZEGO. Szukalem jakichs zaleznosci, moze chodzilo o wysokosc pozycji w menu, i z kazda kolejna coraz bardziej sie sypie ale nie. Niby chodzi sobie dobrze, az nagle ostatnie 3 pozycje zmieniaja sie o duzo za wczesnie.
    @Alex Fortune ; @Haan ; @Kusterek ;

    Piszę tutaj bo juz na prawde nie widze rozwiazania xD Nie mam pojecia dlaczego zmienia sie tam za wczesnie, choc nie powinno.

    @EDIT

    ROZWIĄZANE:

    1. jQuery błędnie mierzy wysokosc dla css box-sizing:border-box, trzeba zamiast elem.height(); uzyc parseInt(elem.css('height');
    2. Blednie zapisywalem index sekcji, zawsze uzywal 11 a nie po kolei, dodalem index jako atrybut data-index dla kazdej sekcji, i z niej czytalem kolejne przesuniecie w menu.
    3. Za wczesnie odpalana funkcja, dodalem setTimeout zeby strona zdazyla sie wygenerowac do konca.

    Ostateczny kod:

    Kod :
    	var sidebarmenu = $('.fixedsidebar-column .menu');
    
    		var offsetVisible = 180;
    		var	sekcjaindex = 0;	
    
    	setTimeout(function(){
    		$('.page-template-page-fixedsidebar-php .pasek').each(function(i) {
    			var sek = $(this);
    			var name = sek.attr('class');
    			sek.attr('data-index',sekcjaindex);
    			name = name.match(/sekcja\-[a-z,A-z,\-]+/g);
    			if (!name) {
    				return;
    			} else {					
    				name = name[0];
    				name = name.replace('sekcja-','');
    			}
    			var id = '#'+name;
    
    			var position = sek.offset();
    			sek.scrollspy({
    				min: position.top - parseInt(sek.attr('data-index'))*30,
    				max: position.top + parseInt(sek.css('height')) - parseInt(sek.attr('data-index'))*30,
    				buffer: offsetVisible,
    				onEnter: function(element, position) {
    					console.log(parseInt(sek.attr('data-index')));
    					sidebarmenu.find('a[href="'+id+'"]').closest('li').addClass('current');
    				},
    				onLeave: function(element, position) {
    					sidebarmenu.find('a[href="'+id+'"]').closest('li').removeClass('current');
    				}
    			});
    		sekcjaindex++;
    		});
    	},100);
    Ostatnio zmieniony przez Bazan : 24-03-2014, 21:41
    Dreaming by drumming. ˆˆ™

  2. #2
    Avatar Haan
    Data rejestracji
    2005
    Położenie
    Irlandia
    Wiek
    36
    Posty
    2,085
    Siła reputacji
    22

    Domyślny

    Cytuj Bazan napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    3. Za wczesnie odpalana funkcja, dodalem setTimeout zeby strona zdazyla sie wygenerowac do konca.
    :/

    Nie przeczytalem calego kodu, ale sztuczne opoznianie funkcji poprzez settimeout to nie jest dobee rozwiazanie problemu eventow
    ipse se nihil scire id unum sciat

  3. #3
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    33
    Posty
    1,909
    Siła reputacji
    19

    Domyślny

    Nie wątpie :P A co mozna zrobic w takiej sytuacji?
    Dreaming by drumming. ˆˆ™

  4. Reklama
  5. #4
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    34
    Posty
    11,076
    Siła reputacji
    25

    Domyślny

    jeśli za dużo dziwnych rzeczy nie robisz to window.onload() chyba?
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  6. #5
    Avatar Haan
    Data rejestracji
    2005
    Położenie
    Irlandia
    Wiek
    36
    Posty
    2,085
    Siła reputacji
    22

    Domyślny

    z window.onload byl jakis problem, juz nie pamietam jaki

    ja zawsze uzywam (document).ready()
    ipse se nihil scire id unum sciat

  7. #6
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    33
    Posty
    1,909
    Siła reputacji
    19

    Domyślny

    No to mam oczywiscie ready :P

    W sumie nie jestem teraz pewny czy na pewno chodzi o to opoznienie wykonania, ale na razie zostawiam to w takiej formie jak jest. Nie jest to w przypadku tej strony niewiadomo jak wazne :P

    Z tego co czytalem, to window.onload chyba moze zostac nadpisane przez inne skrypty tak? I sie wykonuje tylko jedna funkcja, nie wiem, czystego javasript w ogole nie znam :P
    Dreaming by drumming. ˆˆ™

  8. Reklama
  9. #7
    Avatar Haan
    Data rejestracji
    2005
    Położenie
    Irlandia
    Wiek
    36
    Posty
    2,085
    Siła reputacji
    22

    Domyślny

    window.onload jest na pewno rozne dla roznych przegladarek
    ipse se nihil scire id unum sciat

  10. #8

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    17

    Domyślny

    Cytuj Haan napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    z window.onload byl jakis problem, juz nie pamietam jaki

    ja zawsze uzywam (document).ready()
    Konkretniej, to ladowania strony dzieli sie na parę etapów:

    1) HTTP request po stronkę HTML
    2) Sparsowanie drzewka DOM
    3) Tutaj window.onload() jest uruchamiany
    4) Rozpoczęcie ładowania wszystkich innych rzeczy zewnętrzny ( CSS, JS, obrazki ) ..
    5) Po załadowaniu uruchamiane jest document.ready()

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [jQuery]Skrypty nie działają
    Przez Dio Paladin w dziale Programowanie
    Odpowiedzi: 4
    Ostatni post: 25-12-2014, 21:46
  2. AutoIT labele ? or something like that? [Rozwiązane]
    Przez BBsrv w dziale Programowanie
    Odpowiedzi: 11
    Ostatni post: 08-01-2014, 21:28
  3. jQuery rozwijane menu na telefonach
    Przez Bazan w dziale Programowanie
    Odpowiedzi: 13
    Ostatni post: 29-11-2013, 14:03
  4. Potrzebny ktos kto ogarnia JavaScript.
    Przez Yakuza w dziale Programowanie
    Odpowiedzi: 0
    Ostatni post: 16-08-2013, 00:07
  5. Problemy techniczne cipsoftu rozwiązane.
    Przez Aqualek w dziale Niusy
    Odpowiedzi: 4
    Ostatni post: 02-12-2008, 15:48

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •